如何禁用ViewState?

时间:2012-01-30 08:14:10

标签: jsf jsf-2 viewstate

我从MS和ASP.NET进入Java世界,并在Java中寻找类似于基于ASP.NET组件的HTML框架。在审查了互联网上的大量链接后,看起来JSF2(带有facelets)是最佳匹配(顺便说一下这是真的吗?还是有其他更好的选择?)。

我在评估期间遇到的问题是正确使用JSF的视图状态。我最后的使用场景是一个集群的WEB服务器,我不会有任何会话/服务器存储的对象,我不会使用网络带宽进行虚拟视图状态(请参阅另一个人在这里有点相关的问题{{3 }})。

我参加了一些JSF2教程并在设置了javax.faces.STATE_SAVING_METHOD = client后将ViewState生成为440个字符的HTML(omygod,页面只包含1个虚拟文本输入和1个提交按钮)。在“POST on submit”中,我只需要来自文本输入的文本(10个字符)而不是虚拟视图状态(440个字符)。

所以问题是 - 是否可以在JSF2中禁用视图状态?

相关链接:

更新:相关链接(来自以下评论):

2 个答案:

答案 0 :(得分:10)

JSF是一个基于组件的框架,它具有很强的状态 - 所以你需要某个地方的状态,通过网络发送到客户端并再次发布,或者在服务器端。所以AFAIK的答案是否,你无法禁用View状态。但你可以最小化它 - 但是某些州总是需要存储。这个link是相关的。

如果您正在寻找一个不那么有状态的Java Web框架 - 那么可以查看一些基于Action的框架,如Struts或Stripes,这样您就可以在Request范围内工作,而不需要存在(或重建)组件树在回发上。 Play框架获得了良好的发展 - 专门针对RESTful架构而设计。我自己没有这方面的经验,但你可能想调查一下。取自Play网站:

  

简单的无状态MVC架构

     

您的一方是数据库,另一方是网络浏览器。为什么   如果你介于两者之间?

     

基于状态和组件的Java Web框架使其变得容易   自动保存页面状态,但这带来了很多其他   问题:如果用户打开第二个窗口会发生什么?怎么样的呢?   用户点击浏览器后退按钮?

答案 1 :(得分:8)

由于Mojarra 2.1.19和Mojarra 2.2.0-m10,可以通过将transient的{​​{1}}属性设置为<f:view>来禁用每个视图的状态保存。

true

另见: