JSF 2.2 interpret empty string submitted values as null not working
Solution 1
The same happens with glassfish 4 with the latest Mojarra-2.2.5 as well as Wildfly 8 Final . . . I have seen multiple bug reports on this, Manfried Riem says "It was determined this is an EL issue and the EL implementation has been fixed to fix this", but not sure if that means Updating Mojarra fixes it, because it does not in glassfish 4. I also updated the el, and that did not work either.
Solution 2
Unfortunately there seems to be a bug in Glassfish 4.
See:
INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL doesn't work at all
and:
Empty String as Null is not effective in 2.2.0
Solution 3
Apache el implementation do the empty string (or 0 int value). You can find it in org.apache.el.parser.AstValue class:
public void setValue(EvaluationContext ctx, Object value)
throws ELException {
Target t = getTarget(ctx);
ctx.setPropertyResolved(false);
ELResolver resolver = ctx.getELResolver();
// coerce to the expected type
Class<?> targetClass = resolver.getType(ctx, t.base, t.property);
if (COERCE_TO_ZERO == true
|| !isAssignable(value, targetClass)) {
resolver.setValue(ctx, t.base, t.property,
ELSupport.coerceToType(value, targetClass));
} else {
resolver.setValue(ctx, t.base, t.property, value);
}
if (!ctx.isPropertyResolved()) {
throw new PropertyNotFoundException(MessageFactory.get(
"error.resolver.unhandled", t.base, t.property));
}
}
You can set COERCE_TO_ZERO to false (-Dorg.apache.el.parser.COERCE_TO_ZERO=false).
Or use other el impl:
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>el-impl</artifactId>
<version>2.2</version>
</dependency>
And set context-param:
servletContext.setInitParameter("com.sun.faces.expressionFactory", "com.sun.el.ExpressionFactoryImpl");
That was el-api side.
Other side is JSF. You have to set this context-param for JSF:
servletContext.setInitParameter("javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL", "true");
Sorry for my english!
onsm7
Updated on June 06, 2022Comments
-
onsm7 almost 2 years
I have migrated from Java EE 6 to Java EE 7, and now with JSF 2.2 the context param
INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL
seems not work. In JSF 2.1 I set it to "true" and it works perfectly, but now I get always blank strings.<context-param> <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name> <param-value>true</param-value> </context-param>
Can anyone say something about it?