呈现响应阶段之前的 JSF 事件侦听器
JSF Event Listener before Render Response Phase
我想在达到呈现响应阶段之前首次加载表单时在 JSF 视图范围的辅助 bean 中进行一些处理。我不能在渲染响应阶段执行此过程,因为我有一个依赖于处理的动态包含。有没有我可以使用的事件侦听器或阶段侦听器?
您可以使用编程阶段侦听器我假设您使用的是 JSF2。 class 以下将在您的应用程序中加载阶段侦听器。
@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());
}
}
在 class 下面,您可以在 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;
}
我想在达到呈现响应阶段之前首次加载表单时在 JSF 视图范围的辅助 bean 中进行一些处理。我不能在渲染响应阶段执行此过程,因为我有一个依赖于处理的动态包含。有没有我可以使用的事件侦听器或阶段侦听器?
您可以使用编程阶段侦听器我假设您使用的是 JSF2。 class 以下将在您的应用程序中加载阶段侦听器。
@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());
}
}
在 class 下面,您可以在 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;
}