7

我已经从 Java EE 6 迁移到 Java EE 7,现在使用 JSF 2.2,上下文参数INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL似乎不起作用。在 JSF 2.1 中,我将其设置为“true”并且它运行良好,但现在我总是得到空白字符串。

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

谁能说点什么?

4

6 回答 6

6

具有最新 Mojarra-2.2.5 以及 Wildfly 8 Final 的 glassfish 4 也是如此。. . 我已经看到了多个关于此的错误报告,Manfried Riem 说“已确定这是一个 EL 问题,并且已修复 EL 实现以解决此问题”,但不确定这是否意味着更新 Mojarra 可以修复它,因为它不在 glassfish 4. 我也更新了el,也没用。

于 2014-02-19T11:47:27.813 回答
3

不幸的是,Glassfish 4 中似乎存在一个错误。

看:

INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 根本不起作用

和:

Empty String as Null 在 2.2.0 中无效

于 2013-12-03T06:47:48.977 回答
2

Apache el 实现执行空字符串(或 0 int 值)。您可以在 org.apache.el.parser.AstValue 类中找到它:

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));            
    }
}

您可以将 COERCE_TO_ZERO 设置为 false (-Dorg.apache.el.parser.COERCE_TO_ZERO=false)。

或者使用其他 el impl:

    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>el-impl</artifactId>
        <version>2.2</version>      
    </dependency>

并设置上下文参数:

    servletContext.setInitParameter("com.sun.faces.expressionFactory", "com.sun.el.ExpressionFactoryImpl");

那是 el-api 方面。

另一边是JSF。您必须为 JSF 设置此上下文参数:

servletContext.setInitParameter("javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL", "true");

对不起我的英语不好!

于 2015-03-27T14:32:08.673 回答
0

应用程序服务器的 JVM 属性在类似情况下帮助了我。请参阅Mojarra JSF 2.1 中错误的 INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 的解决方法

于 2015-02-23T08:29:12.123 回答
0

现在事情变得更加混乱了。我正在使用 JSF 2.2.8-SNAPSHOT,虽然在 JSF bean 验证期间该值被解释为 null,但实际值集是一个空字符串。这意味着其他组件进行验证,例如 JPA 长度验证失败,因为字符串值为“”。

由于这显然需要更改规格,因此我不会很快想到这一点。jira还包含本文中描述的解决方法

附言。这可能是正确的行为,因为文档指出 null 已传递给 bean 验证框架,但这根本不直观。

于 2014-07-06T09:09:22.210 回答
-1

我在下面尝试过并得到了工作。我们需要在 web.xml 中添加这个条目

<context-param>
    <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
    <param-value>true</param-value>
</context-param>
于 2015-10-30T07:13:09.860 回答