gpt4 book ai didi

JSF 2.0部分状态保存似乎不起作用

转载 作者:行者123 更新时间:2023-12-04 05:09:36 25 4
gpt4 key购买 nike

我正在评估在高流量网站中使用JSF的可能性。有人告诉我,在JSF 2.0中,组件树没有存储在 session 中,并且一旦修改了组件树,就仅存储增量。

这是我正在查看的页面:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<body>
<h:form>
hello, world
</h:form>
</body>
</html>

每次查看此页面时,将近1K分配给该 session 。如果删除 <form>标记,则 session 中将不存储任何内容。

知道为什么将组件树存储在 session 中吗?我认为这将在回发请求中进行计算。

最佳答案

部分状态保存并不意味着状态不会保存在 session 中。这仅意味着将保存部分组件树状态,而不是整个组件树状态。部分保存状态的关键思想是不会保存客户端在后续请求中不会更改的组件的状态。而是通过在还原 View 期间在服务器端重新执行该 View 来获得的。仅保存对客户端更改敏感的组件状态(表单,输入,按钮等)。您在 session 中看到的1K是部分状态本身。
要自己进行测试,请通过context-param中的以下web.xml开启和关闭状态:

<context-param>
<param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
<param-value>false</param-value>
</context-param>
您会看到,当设置为 false时,大小会增加,这意味着将保存整个组件树。
它存储在 session 中,因为这是Servlet API唯一提供的,它的作用域大于请求作用域。在请求范围内存储将没有任何值(value),因为在后续请求中将不再可用。 Servlet API没有像JSF一样具有 View 范围的概念(顺便说一句,它间接地使用了 session 范围,基本上, View 状态是组件树状态)。
删除表单后,您确实再也看不到它了,因为实际上没有剩下任何可以更改的客户端了(即,不会有回发)。那时保存状态是没有意义的。此外,将没有任何内容将已保存状态的键作为隐藏的输入字段(名称为 javax.faces.ViewState)传递。
也可以看看:
  • What's new in JSF 2.0? - State saving
  • What's the view build time?
  • Why JSF saves the state of UI components on server?
  • 关于JSF 2.0部分状态保存似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4390711/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com