在页面刷新时应该调用JSF生命周期的所有阶段
答案 0 :(得分:1)
这完全取决于请求的类型(POST或GET)和可用参数。例如,普通的香草GET请求只会触发第一个和最后一个阶段。默认情况下,“双提交”(刷新表单提交)将贯穿所有阶段,但根据immediate="true"
和/或UIInput
组件中UICommand
的存在,某些阶段可能会被跳过。
您可以创建一个简单的PhaseListener
并使用它来了解哪些阶段已执行,哪些阶段不执行。
package mypackage;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
public class LifeCycleListener implements PhaseListener {
public PhaseId getPhaseId() {
return PhaseId.ANY_PHASE;
}
public void beforePhase(PhaseEvent event) {
System.out.println("START PHASE " + event.getPhaseId());
}
public void afterPhase(PhaseEvent event) {
System.out.println("END PHASE " + event.getPhaseId());
}
}
在faces-config.xml
中按如下方式注册,以使其运行:
<lifecycle>
<phase-listener>mypackage.LifeCycleListener</phase-listener>
</lifecycle>