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

时间:2015-02-01 15:47:16

标签: jsf-2 myfaces omnifaces

我正在尝试在以下代码行中使用 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和PrimeFaces 5.1的MyFaces 2.0.3实现,它可能是同一个bug吗? 这行代码没有任何问题:

<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>

我是否使用错误或是否有针对此问题的解决方法? 谢谢。

1 个答案:

答案 0 :(得分:2)

这是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>

另见: