首页 文章

如何禁用ViewState?

提问于
浏览
11

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

问题我'm encountering during evaluation right now is correct usage of JSF' s查看状态 . 我的最终使用场景是一个集群的WEB服务器,我不会将网络带宽用于虚拟视图状态(请参阅另一个人在这里有点相关的问题JSF Tuning) .

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

所以问题是 - Is it possible to disable view state in JSF2?

Relevant links:

Update: Relevant links (from comments below):

2 回答

  • 10

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

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

    简单的无状态MVC架构您一方面有数据库,另一方面有Web浏览器 . 你为什么要介于两者之间?基于状态和组件的Java Web框架可以轻松自动保存页面状态,但这会带来许多其他问题:如果用户打开第二个窗口会发生什么?如果用户点击浏览器后退按钮怎么办?

  • 8

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

    <f:view transient="true">
        ...
        <h:form>
            ...
        </h:form>
        ...
    </f:view>
    

    另见:

相关问题