in core/src/main/java/org/apache/myfaces/extensions/validator/core/el/DefaultELHelper.java [235:275]
private String extractPropertyNameOfPropertyPath(String propertyChain)
{
String[] properties = propertyChain.split("\\.");
Object currentPropertyValue = getBean(properties[0]);
Method currentMethod;
String currentPropertyName;
Class currentClassOfPropertyValue;
for(int i = 1; i < properties.length; i++)
{
currentPropertyName = properties[i];
currentClassOfPropertyValue = ProxyUtils.getUnproxiedClass(currentPropertyValue.getClass());
currentMethod = ReflectionUtils.tryToGetMethod(currentClassOfPropertyValue,
"get" + currentPropertyName.substring(0, 1).toUpperCase() + currentPropertyName.substring(1));
if(currentMethod == null && currentPropertyValue instanceof Map)
{
//it's ok for the simple map case - but not for e.g.:
//#{bean1[bean2.propertyNameProvider[ bean3.index]]}
//or every other complex replacement for bean3.index
//it might also require an adjustment at FaceletsTaglibExpressionHelper#tryToTransformToRealBinding
((Map)currentPropertyValue).get(currentPropertyName);
}
else
{
currentPropertyValue = ReflectionUtils.tryToInvokeMethod(currentPropertyValue, currentMethod);
}
}
if(currentPropertyValue instanceof String)
{
return (String)currentPropertyValue;
}
else
{
this.logger.severe("unexpected value within map syntax: " + propertyChain +
" last property name: " + currentPropertyValue);
return null;
}
}