我必须在我的bean上调用一个init方法作为页面加载的第一个操作,我试图#{bean.init}在我的页面的最开始调用,但我已经看到<c:if>测试是在之前执行的init().我有类似的东西
#{bean.init}
<c:if test="#{bean.conditionsCheck}">...</c:if>
Run Code Online (Sandbox Code Playgroud)
并且在conditionsCheck()之前调用该方法init(),我该如何修复它并将其init()称为第一件事?
您可以使用@PostConstruct注释自动调用init方法:
@PostConstruct
public void init() {
// do something
}
Run Code Online (Sandbox Code Playgroud)
在构造bean之后自动调用此方法.
您的解决方案看起来更像是f:eventwith,type="preRenderView"但是这不能使用,因为c:if在视图构建期间评估标记,而f:event(在您的解决方案之后)在渲染响应阶段呈现视图之前运行.看看这个问题和这个问题来获取细节.
更新:正如您所评论的那样,您使用的@SessionScopedbean @PostConstruct只在每个会话中调用一次,而不是在每个页面加载时调用.在这种情况下,另一种解决方案是将您的init方法作为方法中的第一个语句调用conditionsCheck(与使用假c:if布尔init的建议几乎相同).您也可以使用自定义,PhaseListener但我想这个问题会有点过量.
也可以看看:
| 归档时间: |
|
| 查看次数: |
12699 次 |
| 最近记录: |