什么是JSF 2.0中的STATE_SAVING_METHOD参数

Bas*_*sit 44 jsf-2

我无法理解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

java.io.NotSerializableException
Run Code Online (Sandbox Code Playgroud)

这种异常通常在根本原因中显示一条消息,该消息显示未实现的类的完全限定类名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.

  • 如果我使用客户端设置,CSRF 和网络钓鱼会怎么样? (2认同)

pra*_*een 13

javax.faces.STATE_SAVING_METHOD 参数用于指定状态应保存的位置.

如果要在服务器上保存状态(这是JavaServer Faces参考实现中的缺省param-value值),请将值指定为server.

否则在客户端保存状态我们可以client在中指定param-value.

如果状态保存在客户端上,则整个视图的状态将呈现为页面上的隐藏字段.