我希望在到达渲染响应阶段之前首次加载表单时,在JSF视图范围的辅助bean中进行一些处理。我无法在渲染响应阶段执行此过程,因为我有一个依赖于处理的动态包含。我可以使用事件监听器或阶段监听器吗?
答案 0 :(得分:0)
您可以使用程序化阶段监听器我假设您使用的是JSF2。下面的类将在您的应用程序中加载阶段监听器。
@ManagedBean(eager = true)
@ApplicationScoped
public class SomeClass implements Serializable {
@PostConstruct
private void initialize() {
LifecycleFactory factory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
Lifecycle lifecycle = factory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
lifecycle.addPhaseListener(new PhaseListenerImpl());
}
}
在课程下面,你可以在beforePhase方法中定义你的逻辑。
public class PhaseListenerImpl implements PhaseListener {
@Override
public void afterPhase(PhaseEvent pe) {
return;
}
@Override
public void beforePhase(PhaseEvent pe) {
FacesContext fc = pe.getFacesContext();
String viewId = fc.getViewRoot().getViewId();
try {
if(viewId==blah){
//your logic goes here for your view
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}