应用程序似乎启动良好,但我现在被应用于视图参数的空字符串所困扰。javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL
参数已在我的web.xml中设置为true。
以下是我所做的升级:
- 更新的JSF工件:从javax.faces:javax.facesApi:2.2和org.glassfish:javax.faces:2.2.15到javax.faces:javax.facesAPI:2.3和org.glassefish:javax.faces:2.3.8
- 中更新的命名空间面向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
EDIT:原来这与Tomcat 8(和9(的强制行为有关,空字符串被错误地设置为空字符串
但正如标题中所述,我正试图在Tomcat9(9.0.12(上迁移到JSF 2.3。前面的问题和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)
在web.xml中,包括:
<context-param>
<param-name>
javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL
</param-name>
<param-value>
**false**
</param-value>
</context-param>