【发布时间】:2010-03-30 16:57:45
【问题描述】:
当我的托管 bean 中的特定方法被调用时,我想知道我是否处于 JSF 生命周期的恢复视图阶段。我怎样才能做到这一点?
【问题讨论】:
标签: jsf jakarta-ee
当我的托管 bean 中的特定方法被调用时,我想知道我是否处于 JSF 生命周期的恢复视图阶段。我怎样才能做到这一点?
【问题讨论】:
标签: jsf jakarta-ee
如果您已经在使用 JSF 2.0,那么您可以使用 FacesContext#getCurrentPhaseId() 进行检查:
if (FacesContext.getCurrentInstance().getCurrentPhaseId() == PhaseId.RESTORE_VIEW) {
// Restore view called.
}
但是,如果您仍在使用 JSF 1.x,那么您最好的方法是使用 PhaseListener,它在 PhaseId.RESTORE_VIEW 上侦听,在 beforePhase() 期间在请求范围内设置标志/切换/令牌并删除afterPhase() 期间的它。然后让 bean 的 getter 方法检查它是否存在于请求范围内。
也就是说,你到底需要它做什么?我从来没有需要这样的功能需求。 bean 的构造函数或 @PostConstruct 带注释的方法可能不是一个更好的地方来做这样的初始化工作吗?
【讨论】:
RENDER_RESPONSE。这样您就可以使用 if (FacesContext.getCurrentInstance().getRenderResponse()) {} 代替自 JSF 1.0 以来已经可用的。但是如果 bean 本身是请求范围的,那么我只需将它放在 bean 的构造函数中。除非 bean 有太多的责任,但这是另一个问题 ;)
RENDER_RESPONSE,它只会返回true。此阶段总是在请求期间作为最后阶段执行一次,就像 RESTORE_VIEW 在请求期间总是作为第一阶段执行一次。