我正在用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>
Run Code Online (Sandbox Code Playgroud)
initPage(id)方法必须在bean中加载列表.但似乎该方法是在c:forEach之后调用而不是之前调用的.有任何想法吗?
Bal*_*usC 12
JSTL标记在视图构建期间运行.在<f:event type="preRenderView">运行前右视图渲染时间.换句话说,<c:forEach>之前运行<f:event>.所以,这种行为是完全可以预期的.
你有2个选择:
使用@ManagedProperty而不是<f:viewParam>,或当bean在视图范围内或更广泛时,从ExternalContext#getRequestParameterMap()内部手动抓取它@PostConstruct.并且,使用@PostConstruct而不是<f:event type="preRenderView">.是的,这使整个<f:metadata>过时了.你可以安全地删除它.
使用JSF组件而不是<c:forEach>标记,例如<ui:repeat>.
| 归档时间: |
|
| 查看次数: |
2570 次 |
| 最近记录: |