什么是JSF 2.0中的STATE_SAVING_METHOD参数
我无法理解web.xml中这一行的function
<context-param> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>server</param-value> </context-param>
我已经读过,NetBeans默认是客户端 。 我刚刚遇到了一个问题,我的应用程序中有很多bean,并且<param-value>
被设置为client,所以我得到
java.io.NotSerializableException
虽然我的bean是可序列化的(即他们实现了Serializable接口)。 我的豆在@ViewScope 。 但是当我把它改成服务器时,事情就会起作用。 为什么? 当我使用客户端和服务器时有什么不同。 任何人都可以借助一个例子来解释我。
谢谢
java.io.NotSerializableException
这种exception通常会在根本原因中显示一个消息,显示没有实现Serializable
的类的全限定类名。 您应该密切关注此消息以了解它正在讨论哪个类,然后让它相应地实现Serializable
。
通常, 只让托pipe的bean类可串行化并不总是足够的。 您还需要确保它的每个属性都是可序列化的。 像String
, Long
等大多数标准types都已经实现了Serializable
。 但是(自定义的)复杂的types,比如嵌套的bean,实体或者EJB也应该是可序列化的。 如果某些东西不能像Serializable
那样真正实现,比如InputStream
,那么你应该重新devise模型或者使其成为transient
(并且记住在反序列化之后它将是null
)。
当我使用客户端和服务器时有什么不同
首先介绍一些背景信息: 为什么JSF将UI组件的状态保存在服务器上?
主要的技术区别在于, client
设置将整个视图状态存储为生成的HTML输出中的javax.faces.ViewState
隐藏input字段的值,并且server
设置将其存储在会话中以及唯一的ID将其引用为javax.faces.ViewState
隐藏的input字段的值。
所以,设置到client
增加networking带宽的使用量,但是会减less服务器的内存使用量,而对server
设置则会相反。 然而,设置到client
还有一个额外的function优势:当会话过期或客户端打开太多视图时,它会阻止ViewExpiredException
。
javax.faces.STATE_SAVING_METHOD
参数用于指定应保存状态的位置。
如果要将状态保存在服务器上(这是JavaServer Faces参考实现中的默认设置),请将param-value
指定为server
。
否则,为了保存客户端的状态,我们可以在param-value
指定client
。
如果状态保存在客户端上,则整个视图的状态将呈现为页面上的隐藏字段。
- 为什么我需要在另一个组件中使用rendered =“#{some}”嵌套一个组件,当我想要更新它时?
- 列表<T>上的UISelectMany导致java.lang.ClassCastException:java.lang.String不能转换为T
- 什么是Mojarra?
- 我可以从JSF支持bean方法更新JSF组件吗?
- 如何创build一个自定义EL函数来调用一个静态方法?
- JSF使用plain / raw XHTML / XML / EL源返回空白/未分析的页面,而不是呈现的HTML输出
- 如何保存和检索我的服务器上的图像在一个Java Web应用程序
- 浏览范围bean是否存活导航JSF
- 如何在JSF中实现loginfilter?