JSF 2.2 interpret empty string submitted values as null not working

13,594

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!

Share:
13,594
onsm7
Author by

onsm7

Updated on June 06, 2022

Comments

  • onsm7
    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?