我对我的webapplication的奇怪行为感到疯狂。
我不得不将它从EJB3更改为Spring,现在我面临一个(至少对我而言)奇怪的错误。我有一些正常的JSF页面(Primefaces 3.4)并创建了一些Filter。这一切都很好,但我所有过滤的BigInteger
值现在始终是0
而不是null
。结果是,我的db-query现在总是将0 - values
添加到我的查询..这不是我想要的。
每个建议都将非常感激。
我已经添加了
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
到我的WEB.xml,但这没有改变任何东西......
修改 因此,解决方案是将EL从Tomcat 7.0更改为“标准”EL。这有点奇怪。我的web.xml现在看起来像这样:
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>
我的pom看起来像那样:
<dependency>
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>el-impl</artifactId>
<version>2.2</version>
</dependency>
哇...现在它有效......仍然困惑......
答案 0 :(得分:5)
此行为特定于Tomcat 6.0.16及更高版本。 太严格遵循EL specification,它表示数字类型应强制为零,并且优先于应强制转换为null
的对象类型。换句话说,不仅int
,long
等数字基元被强制为零,而且其包装类型表示也被强制为Integer
,Long
,{ {1}},BigInteger
等被强制为零而不是BigDecimal
。
您需要添加以下VM参数以禁用此非直观行为:
null
您当然也可以像Glassfish EL实现一样替换Tomcat EL实现(注意它不是您所暗示的“标准EL”,它只是“参考实现”)。
请注意,这一切都与Spring或EJB无关,只是巧合或不正确的观察。