【发布时间】:2019-05-14 12:08:26
【问题描述】:
该应用程序似乎启动良好,但我现在被应用于查看参数的空字符串所困扰。 javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 参数已在我的 web.xml 中设置为 true。
这是我为升级所做的:
- 更新了 JSF 工件:从 javax.faces:javax.faces-api:2.2 和 org.glassfish:javax.faces:2.2.15 到 javax.faces:javax.faces- api:2.3 和 org.glassfish:javax.faces:2.3.8。
- 更新了 faces-config.xml 中的命名空间。
- 更新了 beans.xml 中的命名空间以启用 2.0。
- 已将 web.xml 更新为 servlet 4.0。
- 在 web.xml 中添加了 javax.faces.ENABLE_CDI_RESOLVER_CHAIN 和 javax.faces.ENABLE_WEBSOCKET_ENDPOINT。
- 我什至添加了一个 JSF 2.3 激活器类,尽管它似乎是多余的。
- OmniFaces 从 2.6.9 更新到 3.2。
编辑:原来这与Tomcat 8 (and 9) coerce behaviour, null strings are incorrectly set as empty strings有关
但正如标题中所述,我正在尝试迁移到 Tomcat 9 上的 JSF 2.3 (9.0.12)。上一个问题和 BalusC 博客没有直接解决这种情况。我还应该声明该应用程序在此之前在 JDK11 上运行没有问题。
从上一个问题中我了解到使用 Oracles EL 实现可以工作,但我得到:
java.lang.ArrayIndexOutOfBoundsException: arraycopy: last source index 16 out of bounds for byte[9]
at java.base/java.lang.System.arraycopy(Native Method)
at com.sun.faces.util.ByteArrayGuardAESCTR.decrypt(ByteArrayGuardAESCTR.java:157)
at com.sun.faces.context.flash.ELFlash$PreviousNextFlashInfoManager.decode(ELFlash.java:1414)
at com.sun.faces.context.flash.ELFlash.getCurrentFlashManager(ELFlash.java:1237)
at com.sun.faces.context.flash.ELFlash.doPrePhaseActions(ELFlash.java:641)
at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:214)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:98)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:133)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:201)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:670)
【问题讨论】:
-
你的 EL 版本怎么样?
-
我没有触及它,因为它不是我的 Gradle 构建文件的一部分。 EL 不是 Tomcat 捆绑的吗?
-
确实如此,但如果您在自己的项目中包含某些内容,它可能会发挥作用。
-
相关? stackoverflow.com/questions/33334192/… ???我通过在搜索引擎google.com/… 中发布“tomcat 9 javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL site:stackoverflow.com”发现了这一点
-
这似乎真的很相关。我的第一反应是我已经在 Tomcat 8.5 上,这不是问题,但我会马上检查一下。