我正在尝试在以下代码行中使用 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>
我是否使用错误或是否有针对此问题的解决方法? 谢谢。
答案 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>