我知道 JSF 可能会调用托管 bean 方法几次,即使它在 .xhtml 中只调用一次。我知道这是由于编码*方法造成的。
我想请您向我解释一下以下案例。
我有一个类似这样的 JSF 文件:
<h:form id="form1">
<h:panelGroup id="output">
...
<h:commandLink...>
<f:ajax render=":form1:output"/>
</h:commandLink>
</h:panelGroup>
</h:form>
到目前为止一切都清楚了;按命令链接会重新呈现表单 panelGroup 中页面的一部分。
代码如下:
<ui:repeat value="#{movieBean.categories}" var="category">
<li>
<h:outputLink value="index.xhtml">
<f:param name="categoryId" value="#{category.categoryId}"/>
<h:outputText value="#{category.description}"/>
</h:outputLink>
</li>
</ui:repeat>
#{movieBean.categories} //this is just a 'test line'
movieBean 是请求范围的。
现在,当我第一次进入该页面时,我收到两次对 movieBean.categories 的调用。
这很清楚,因为它在代码中被调用了两次。然而,当我点击 AJAX 链接渲染时
我仅从页面(输出)的一部分获取 movieBean.categories<ui:repeat>
甚至再次打电话
尽管它位于部分呈现的页面区域之外。这次不叫‘测试线’。
我又进行了一次测试。我删除了<ui:repeat>
标签仅留下“测试线”。
AJAX 部分渲染不再像以前那样调用它。
是什么让 movieBean.categories 在 a 中调用<ui:repeat>
标记不同
比“测试线”中的那个?以及为什么里面的电话<ui:repeat>
按 AJAX 链接时生成
即使它在外面部分渲染<h:panelGroup id="output"/>
tag?
我非常确定“冗余”调用是在 JSF 重建元素树以将 POST 数据存储到适当元素中的阶段内进行的。
因此,如果您停留在页面上,那么每个请求基本上都会有两个 getter 调用。第一个存储新的表单值,然后呈现页面内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)