ewe*_*nli 25
问题是:这个值是如何使用的?它是否用于验证在提交时发送的值,以确保不会发送相同的请求两次?
viewstate存在的原因是因为HTTP是无状态的.跨请求的组件状态需要以某种方式维护.您可以将状态存储在服务器上的内存中并将其绑定到会话,或者每次在请求/响应中对其进行序列化/反序列化.
AFAIK,视图状态不用于检测双重提交,但如果您附加时间戳或类似的东西,它可以.
视图状态也可以加密,以确保客户端不会改变它.
另外,它是如何计算的 - 我意识到富脸可能与myfaces的计算方式不同,但一个想法会很好.
每个组件都负责使用saveState和保持其状态restoreState(参见本教程).因此不同的组件套件会导致不同的视图状态.同样,不同的JSF实现可能会导致不同的视图状态.
McD*_*ell 12
如果您熟悉JavaScript,您可以将JSF组件树看作有点像HTML DOM,其中HTML页面定义了初始状态,但您可以在运行时更改它.
视图技术(通常是JSP或Facelets)定义了初始状态,但之后它可以以编程方式进行操作.例如,您可以添加组件或设置属性.为了使其正常工作,必须在请求之间保持视图状态.
视图状态分为两部分.第一个定义组件树的结构:
UIView
- UIForm
- UICommand
- UIInput
Run Code Online (Sandbox Code Playgroud)
第二部分定义组件的状态.由于像UIData这样的组件,它们是分开的,其中子项可以(例如)每行状态.这是通过StateHolder机制编组/解组的.