【问题标题】:How many copies of a view saved in state?在状态中保存了多少个视图副本?
【发布时间】:2012-10-11 15:29:17
【问题描述】:

每篇文章和 JSF2 规范都在说视图已恢复和保存。没有人说每个用户保存了多少相同视图的版本。我可以看到 javax.faces.ViewState 隐藏变量的值在每次回发后都会不断变化。我也知道我可以从两个不同的浏览器选项卡在同一个页面上工作,并且每个选项卡都保持自己的状态。

所以,问题是,每次回发时,是否保存了新版本的视图(除了已经保存的副本)?

我需要知道这一点有两个原因。 a) 估计会话大小 b) 编写自动化测试脚本。

谢谢。

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

    所以,问题是,每次回发发生时,是否保存了新版本的视图

    那部分是真的。

    (除了已经保存的副本)?

    那部分不是真的。只会添加新创建的视图(来自 GET 请求),而不是恢复的视图(来自 POST 请求)。

    在回发时,视图被恢复、操作和保存,从而基本上替换了相同视图的先前版本。

    另见:

    【讨论】:

    • @BaluesC。谢谢。我可以要求澄清吗?如果我在一个选项卡中进行回发,然后在另一个选项卡中执行 GET,我会不会看到保存在选项卡 #1 中的视图?
    • 当然不是。您所描述的仅适用于会话或应用程序范围。您不应将视图范围与会话范围混淆。另见stackoverflow.com/questions/7031885/…
    • 如果每个用户的页面只保存一个版本,我不确定每个选项卡如何在视图和禁用、隐藏状态等中具有不同的值。我会继续做更多的研究。谢谢。
    • 页面 != 查看。一个页面可以有多个视图,每个浏览器选项卡/窗口一个。与在初始 GET 请求中创建的视图完全相同的视图在回发中被重用。
    • 我查看了用户会话以及 Mojarra 如何在那里保存状态。实际上,在每次回发后除了旧版本之外,都会添加一个新版本的视图。有关详细信息,请参阅下面的答案。
    【解决方案2】:

    所以,我对 Mojarra 如何在服务器中保存状态进行了更多调查。我浏览了 Mojarra 源代码,编写了一个会话监听器和一个打印出用户会话内容的 Servlet。这是我发现的:

    Mojarra 在会话中添加了一个名为“com.sun.faces.renderkit.ServerSideStateHelper.LogicalViewMap”的地图。对于从选项卡请求的每个唯一 XHTML 页面,都会向该 Map 添加一个条目。这个条目也是一个地图。视图状态保存在第二张地图中。据我所见,为页面的初始 GET 请求和每个回发保存了一个单独的状态。例如,如果用户首先查看页面,然后提交表单 3 次,则为同一页面保存 4 个不同的状态。相信Mojarra别无选择,只能保存每次回发以支持浏览器的返回按钮。

    从概念上讲,顶级 Map(保存在会话中名为“com.sun.faces.renderkit.ServerSideStateHelper.LogicalViewMap”的地图)的内容如下:

    /index.xhtml:Tab#1. This is a map and contains:
        - View state for initial GET
        - View state for postback #1
        - View state for postback #2
    
    /index.xhtml:Tab#2. This is a map and contains:
        - View state for initial GET
        - View state for postback #1
        - View state for postback #2
    
    /another.xhtml:Tab#1. This is a map and contains:
        - View state for initial GET
        - View state for postback #1
        - View state for postback #2
    

    这对繁忙的网站的影响是可怕的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 2014-05-08
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多