相关:在Tomcat 9上更新为JSF 2.3(Mojarra)时,字符串为空还是空字符串的问题

时间:2018-12-13 09:52:49

标签: jsf el tomcat9

该应用程序似乎启动正常,但是现在我被空字符串应用于视图参数所困扰。我的web.xml中的javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL参数已经设置为true。

这就是我要做的升级:

  1. 更新的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
  2. faces-config.xml 中的更新的名称空间。
  3. 更新了 beans.xml 中的命名空间以启用2.0。
  4. 已将 web.xml 更新为Servlet 4.0。
  5. web.xml 中添加了 javax.faces.ENABLE_CDI_RESOLVER_CHAIN javax.faces.ENABLE_WEBSOCKET_ENDPOINT
  6. 我什至添加了一个JSF 2.3激活器类,即使它看起来似乎是多余的。
  7. 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)

1 个答案:

答案 0 :(得分:-1)

在您的 web.xml 中,包括:

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