in core/src/main/java/org/apache/struts2/views/jsp/iterator/SubsetIteratorTag.java [205:282]
public int doStartTag() throws JspException {
// source
Object source;
if (sourceAttr == null || sourceAttr.isEmpty()) {
source = findValue("top");
} else {
source = findValue(sourceAttr);
}
// count
int count = -1;
if (countAttr != null && !countAttr.isEmpty()) {
Object countObj = findValue(countAttr);
if (countObj instanceof Number) {
count = ((Number)countObj).intValue();
}
else if (countObj instanceof String) {
try {
count = Integer.parseInt((String)countObj);
}
catch(NumberFormatException e) {
LOG.warn("unable to convert count attribute [{}] to number, ignore count attribute", countObj, e);
}
}
}
// start
int start = 0;
if (startAttr != null && !startAttr.isEmpty()) {
Object startObj = findValue(startAttr);
if (startObj instanceof Integer) {
start = (Integer) startObj;
}
else if (startObj instanceof Float) {
start = ((Float)startObj).intValue();
}
else if (startObj instanceof Long) {
start = ((Long)startObj).intValue();
}
else if (startObj instanceof Double) {
start = ((Double)startObj).intValue();
}
else if (startObj instanceof String) {
try {
start = Integer.parseInt((String)startObj);
}
catch(NumberFormatException e) {
LOG.warn("unable to convert count attribute [{}] to number, ignore count attribute", startObj, e);
}
}
}
// decider
Decider decider = null;
if (deciderAttr != null && !deciderAttr.isEmpty()) {
Object deciderObj = findValue(deciderAttr);
if (! (deciderObj instanceof Decider)) {
throw new JspException("decider found from stack ["+deciderObj+"] does not implement "+Decider.class);
}
decider = (Decider) deciderObj;
}
subsetIteratorFilter = new SubsetIteratorFilter();
subsetIteratorFilter.setCount(count);
subsetIteratorFilter.setDecider(decider);
subsetIteratorFilter.setSource(source);
subsetIteratorFilter.setStart(start);
subsetIteratorFilter.execute();
getStack().push(subsetIteratorFilter);
if (var != null && !var.isEmpty()) {
pageContext.setAttribute(var, subsetIteratorFilter);
}
return EVAL_BODY_INCLUDE;
}