我无法理解web.xml中这一行的功能是什么
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
我已经读过NetBeans默认是客户端.我刚遇到一个问题,我在我的应用程序中有很多bean,并且<param-value>设置为客户端,所以我得到了
java.io.NotSerializableException
错误,虽然我的bean是Serializable(即他们实现了Serializable接口.).我的豆子在@ViewScope中.但是当我把它改成服务器时,事情就会起作用.为什么?使用客户端和服务器时有什么区别.任何人都可以借助一个例子来解释我.
谢谢
Bal*_*usC 57
Run Code Online (Sandbox Code Playgroud)java.io.NotSerializableException
这种异常通常在根本原因中显示一条消息,该消息显示未实现的类的完全限定类名Serializable.您应该密切关注此消息,以了解它正在讨论哪个类,然后让它相应地实现Serializable.
通常,只使您的托管bean类可序列化并不总是足够的.您还需要确保其每个属性也可序列化.大多数标准类型如String,Long等已经实现了Serializable.但是(自定义)复杂类型(如嵌套bean,实体或EJB)也应该是可序列化的.如果某些东西不能真正实现Serializable,例如InputStream,那么你应该重新设计模型或制作它transient(并记住它将null在反序列化之后).
使用客户端和服务器时有什么区别
首先是一些背景信息:为什么JSF会在服务器上保存UI组件的状态?
主要的技术差异是该client设置将整个视图状态存储为javax.faces.ViewState生成的HTML输出中的隐藏输入字段的值,并且该server设置将其与唯一ID一起存储在会话中,该唯一ID又被引用为该值的值.javax.faces.ViewState隐藏的输入字段.
因此,设置为client增加网络带宽使用量但减少服务器内存使用量并设置为server反过来.设置为client具有额外的功能优势:它ViewExpiredException在会话过期或客户端打开过多视图时阻止s.
pra*_*een 13
javax.faces.STATE_SAVING_METHOD 参数用于指定状态应保存的位置.
如果要在服务器上保存状态(这是JavaServer Faces参考实现中的缺省param-value值),请将值指定为server.
否则在客户端保存状态我们可以client在中指定param-value.
如果状态保存在客户端上,则整个视图的状态将呈现为页面上的隐藏字段.