【问题标题】:How to disable ViewState?如何禁用 ViewState?
【发布时间】:2012-02-22 01:54:06
【问题描述】:

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

我现在在评估过程中遇到的问题是正确使用 JSF 的视图状态。我的最终使用场景是一个集群的 WEB 服务器,我不会有任何会话/服务器存储的对象,我不会将网络带宽用于虚拟视图状态(请参阅另一个人的相关问题 JSF Tuning )。

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

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

相关链接:

更新:相关链接(来自下面的 cmets):

【问题讨论】:

  • 我不熟悉 ASP.NET,但是 JSF2 使用部分状态保存,以节省内存。您可能不需要禁用它。见stackoverflow.com/a/4391494/456062
  • “是否可以在 JSF2 中禁用视图状态?”:可以,可以:industrieit.com/blog/2011/11/…
  • BalusC,您的链接似乎切中要害。然而......它确实说需要深度黑客攻击,而 JSF 作者实际上未能抓住自 2004 年以来 JSF 演变的多年中真正重要的方面之一。
  • @XtraCoder 我喜欢 BalusC 的链接,但这似乎是对 JSF 真正目的的冒犯。我曾经也是一名 ASP.NET 开发人员,我对无状态 ASP.NET 也有同样的感觉,但不同之处在于,在 .NET 技术中没有其他众所周知的无状态网页浏览解决方案尚未过时。 Java 没有这个问题,因为有许多框架可以更自然地处理无状态网页,例如 JSP+Struts。
  • @XtraCoder 在我看来,一个好的框架是完善、​​简化和简化特定类型问题的解决方案,而不是试图糟糕地涵盖所有可能需要的解决方案。就像在餐馆一样,你会去一个有大量菜单但食物平庸的地方,还是去一个有小菜单但厨师非常注重制作美味的地方?后者往往更成功。

标签: jsf jsf-2 viewstate


【解决方案1】:

JSF 是一个基于组件的框架,它是高度有状态的——所以你需要在某个地方的状态,要么通过网络发送到客户端并再次发布,要么在服务器端。所以 AFAIK 的答案是否定的,你不能禁用视图状态。但是您可以将其最小化 - 但是某些状态将始终需要存储。这个link 是相关的。

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

简单的无状态 MVC 架构

您的一侧有一个数据库,另一侧有一个网络浏览器。为什么 你应该有一个介于两者之间的状态吗?

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

【讨论】:

  • +1 以获得好的答案。 JSF 就其本质而言是有状态的。要求无国籍的 JSF 就像需要一只宠物猫但试图驯养一只美洲狮。是的,它可能需要付出很多努力,但最终你会得到一个非常不寻常且难以维护的美洲狮,这可能会在以后杀死你。理论上这是可能的,但为什么还要麻烦呢? Struts 或 Stripes 会更合适。
【解决方案2】:

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

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

另见:

【讨论】:

    猜你喜欢
    • 2010-09-11
    • 2012-09-24
    • 1970-01-01
    • 2011-09-09
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    相关资源
    最近更新 更多