RichFaces 3上的JSTL标记管理重新呈现

时间:2013-11-25 16:33:18

标签: ajax jsf richfaces

我在网上阅读了各种例子,其中通过ReachFaces 3的a4j标签发送的ajax调用重新呈现了jstl标签。在这个例子中:

http://relation.to/Bloggers/UsingDynamicallyCreatedRichFacesTabPanelForSearchResults

ajax调用在rich:tabPanel中重新呈现c:foreach(查看“在面板代码后添加下一个代码:”之后的代码。)

我的问题是:由于在创建视图期间评估c:forEach标记(与任何其他jstl标记一样),reRender属性指向的视图部分将在每个ajax请求中从头开始重建?

非常感谢。

尼科

1 个答案:

答案 0 :(得分:0)

查看JSF lifecycle docs,更具体地说,还原视图阶段渲染响应阶段部分,您可以找到您在寻找的内容:

恢复视图阶段

  

如果页面请求是初始请求,则JavaServer Faces实现会在此阶段创建一个空视图,生命周期将前进到呈现响应阶段。在回发期间处理页面时,将填充空视图。

     

如果页面请求是回发,则已存在与此页面对应的视图。在此阶段,JavaServer Faces实现通过使用客户端或服务器上保存的状态信息来恢复视图。

渲染响应阶段

  

在此阶段,如果应用程序使用JSP页面,则JavaServer Faces实现会委托将页面呈现给JSP容器的权限。如果这是初始请求,则当JSP容器执行页面时,页面上表示的组件将添加到组件树中。如果这不是初始请求,则组件已添加到树中,因此无需再次添加它们。在任何一种情况下,组件都将自己呈现为JSP容器遍历页面中的标记。

简而言之,当您执行Ajax请求时,您已经拥有了该视图。 JSF将在模型更新后立即搜索您要通过它重新渲染的组件,并使用新值更新视图。在c:forEach的情况下,它不是组件,而是标记处理程序,因此在之前评估

与您发布的链接相关,请查看此页面有关the difference between components and tag handlers的信息。他们只有不同的生命周期,所以混合时要小心。