Hello,
I'm new to ExtVal, so it's possible I'm missing something, but I have
troubles with a page containing this :
[...]
<tr:selectOneChoice value="#{someBean.status[member]}">
[...]
Where status is declared as a Map (actually what I do here is the
el-map trick to call a method with an argument), and member is a POJO.
Works fine without ExtVal, but when I add ExtVal, I get an exception
when validating the page :
java.lang.IllegalStateException: error at binding:
#{beanBenef.beneficiaire.famille.statut[membre]} -- an el-resolver
error occurred! maybe you used an invalid binding. otherwise: please
report the issue, deactivate the el-resovler of extval via web.xml
context-param: org.apache.myfaces.extensions.validator.DEACTIVATE_EL_RESOLVER
and test again.
at
org.apache.myfaces.extensions.validator.core.el.DefaultELHelper.getPropertyDetailsOfValueBinding(DefaultELHelper.java:182)
at
org.apache.myfaces.extensions.validator.crossval.recorder.CrossValidationUserInputRecorder.recordUserInput(CrossValidationUserInputRecorder.java:56)
at
org.apache.myfaces.extensions.validator.core.interceptor.AbstractValidationInterceptor.beforeGetConvertedValue(AbstractValidationInterceptor.java:114)
at
org.apache.myfaces.extensions.validator.core.renderkit.ExtValRendererWrapper.getConvertedValue(ExtValRendererWrapper.java:468)
at
org.apache.myfaces.trinidad.component.UIXEditableValue.getConvertedValue(UIXEditableValue.java:422)
[...]
Caused by: java.lang.ClassCastException:
sap.metier.utilisateur.Beneficiaire cannot be cast to java.lang.String
at
org.apache.myfaces.extensions.validator.core.el.ExtValELResolver.setValue(ExtValELResolver.java:181)
at com.sun.el.parser.AstValue.setValue(AstValue.java:167)
at com.sun.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:269)
at
com.sun.facelets.el.TagValueExpression.setValue(TagValueExpression.java:93)
at
org.apache.myfaces.extensions.validator.core.el.DefaultELHelper.getPropertyDetailsOfValueBinding(DefaultELHelper.java:178)
... 80 more
The exception is thrown here (ExtValELResolver.java:181) :
public void setValue(ELContext elContext, Object o, Object o1, Object o2)
{
expression += "." + o1;
property = (String)o1; // <== HERE
[..]
"o" is my Map, o1 is the POJO, which is definitely not castable to a String !
The message says I can disable the resolver, which removes the error.
But then I have other messages from ELHelpher trying to resolve
complex EL such as #{bean.someMap[ value != null ? value :
'default']}. The message says that :'default' is not a valid EL
operator...
Is there a way to circumvent this ? I definitely need a Map with a
non-String Object as key ! Is it possible to prevent ExtVal from
analysing one EL, or one page ?
Regards,
Cedric Durmont