in struts2-uel-plugin/src/main/java/org/apache/struts2/uel/elresolvers/XWorkListELResolver.java [40:104]
public Object getValue(ELContext elContext, Object target, Object property) {
if (target != null && property != null && target instanceof List) {
Map<String, Object> valueStackContext = getValueStackContext(elContext);
List list = (List) target;
Class lastClass = (Class) valueStackContext.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
String lastProperty = (String) valueStackContext.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
Integer numericValue = null;
try {
numericValue = Integer.valueOf(property.toString());
} catch (NumberFormatException e) {
//ignore
}
if (numericValue != null) {
if (ReflectionContextState.isCreatingNullObjects(valueStackContext) && objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, true)) {
int index = numericValue.intValue();
int listSize = list.size();
/*if (lastClass == null || lastProperty == null) {
return super.getProperty(context, target, name);
}*/
Class beanClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, property);
if (listSize <= index) {
Object result;
for (int i = listSize; i < index; i++) {
list.add(null);
}
try {
list.add(index, result = objectFactory.buildBean(beanClass, valueStackContext));
} catch (Exception exc) {
throw new ELException(exc);
}
elContext.setPropertyResolved(true);
return result;
} else if (list.get(index) == null) {
Object result = null;
try {
list.set(index, result = objectFactory.buildBean(beanClass, valueStackContext));
} catch (Exception exc) {
throw new ELException(exc);
}
elContext.setPropertyResolved(true);
return result;
} else {
elContext.setPropertyResolved(true);
return list.get(index);
}
} else {
//try normal list
if (numericValue < list.size()) {
elContext.setPropertyResolved(true);
return list.get(numericValue);
}
}
}
}
return null;
}