gpt4 book ai didi

jsf-2 - f :event preRenderView called after c:forEach的JSF方法

转载 作者:行者123 更新时间:2023-12-04 10:42:50 25 4
gpt4 key购买 nike

我正在用 jsf 2.0 做一个页面,我想做这样的事情:

<f:metadata>
<f:viewParam name="id" value="${id}" />
<f:event type="preRenderView" listener="#{controller.initPage(id)}"/>
</f:metadata>
....(Some code)....
<c:forEach items="#{bean.listLoadedByInitPage}" var="var">
#{var.something}
</c:forEach>

方法 initPage(id) 必须在 bean 中加载列表。但似乎该方法是在 c:forEach 加载项目之后调用的。有任何想法吗?

最佳答案

JSTL 标签在 期间运行查看构建 时间。 <f:event type="preRenderView">就在 之前运行查看渲染 时间。换句话说,<c:forEach>之前运行 <f:event> .因此,这种行为完全符合预期。
您有 2 个选择:

  • 使用 @ManagedProperty而不是 <f:viewParam> ,或者当 bean 在 View 范围或更广的范围内时,从 ExternalContext#getRequestParameterMap() 手动抓取它内@PostConstruct .并且,使用 @PostConstruct而不是 <f:event type="preRenderView"> .是的,这使得整个 <f:metadata>过时的。您可以安全地删除它。
  • 使用 JSF 组件代替 <c:forEach>标签,例如 <ui:repeat> .

  • 也可以看看:
  • JSTL in JSF2 Facelets... makes sense?
  • 关于jsf-2 - f :event preRenderView called after c:forEach的JSF方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8156351/

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