我从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中禁用视图状态?
相关链接:
ASP.NET中的用例 - “禁用页面的视图状态”:
JSF Tuning
stackoverflow上没有帮助的回答:
http://www.ironspeed.com/articles/Disable%20View%20State%20for%20a%20Page/Article.aspx
更新:相关链接(来自以下评论):
答案 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