java.io.NotSerializableException: org.omnifaces.taghandler.Validator

java.io.NotSerializableException: org.omnifaces.taghandler.Validator

我正在尝试在以下代码行中使用 Omnifaces 的验证器

<p:inputText
            value="#{createEventBean.newGuest.name}">
            <o:validator validatorId="javax.faces.Required"
                                 message="Numbers only" />
</p:inputText>

但我收到以下错误:

 DefaultFacele E   Exiting serializeView - Could not serialize state: org.omnifaces.taghandler.Validator
                                 java.io.NotSerializableException: org.omnifaces.taghandler.Validator

我在这里找到了对这个问题最接近的 SO 讨论:java.io.NotSerializableException - org.omnifaces.taghandler.Converter 但是我使用 Websphere 8.0.0.9 的 MyFaces 2.0.3 实现和 PrimeFaces 5.1,这可能是同一个错误吗? 这行代码没有任何问题:

<p:inputText id="phone" styleClass="mask-num"
                            value="#{adminBean.user.mobilePhone}">
                            <o:validator validatorId="javax.faces.RegularExpression"
                                pattern="[0-9-]*" message="Numbers only" />
                        </p:inputText>

是我用错了还是有解决办法? 谢谢。

这是 MyFaces 中的错误。我无法确定哪个 MyFaces 版本包含此修复程序,但我可以断定此构造至少在 MyFaces 2.1.12 中运行良好。然而,在 WebSphere 中升级 MyFaces 可能不是一项微不足道的任务(技术上和官僚主义)。

最好的办法是告诉 MyFaces 不要在会话中序列化整个视图状态,而是将其保存在内存中并保存一个引用(就像默认情况下的 Mojarra 那样)。您可以通过 web.xml 中的以下上下文参数执行此操作:

<context-param>
    <param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION</param‌​-name>
    <param-value>false</param-value>
</context-param>

另请参阅:

  • java.io.NotSerializableException: org.omnifaces.taghandler.Converter