如何禁用ViewState?

Xtr*_*der 11 viewstate jsf jsf-2

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

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

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

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

相关链接:

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

pla*_*nes 10

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

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

简单的无状态MVC架构

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

基于状态和组件的Java Web框架可以轻松自动保存页面状态,但这会带来许多其他问题:如果用户打开第二个窗口会发生什么?如果用户点击浏览器后退按钮怎么办?

  • +1获得一个好的答案.JSF本质上是有状态的.要求无国籍的JSF就像需要宠物猫,但试图驯化美洲狮.是的,它可能会付出很多努力,但你最终得到一个非常不寻常和难以维持的美洲狮,可能最终会杀死你.理论上它是可能的,但为什么甚至打扰?Struts或Stripes会更合适. (3认同)

Bal*_*usC 8

由于Mojarra 2.1.19和Mojarra 2.2.0-m10,可以通过设置to 的transient属性来禁用基于每个视图的状态保存.<f:view>true

<f:view transient="true">
    ...
    <h:form>
        ...
    </h:form>
    ...
</f:view>
Run Code Online (Sandbox Code Playgroud)

也可以看看: