Jsf 2 呈现响应阶段之前的JSF事件侦听器
我希望在到达呈现响应阶段之前首次加载表单时,在JSF视图范围的支持bean中进行一些处理。我无法在渲染响应阶段执行此过程,因为我有一个依赖于处理的动态包含。是否有一个事件侦听器或阶段侦听器可用于此目的?您可以使用编程阶段侦听器,我假设您使用的是JSF2。下面的类将在应用程序中加载阶段侦听器Jsf 2 呈现响应阶段之前的JSF事件侦听器,jsf-2,lifecycle,Jsf 2,Lifecycle,我希望在到达呈现响应阶段之前首次加载表单时,在JSF视图范围的支持bean中进行一些处理。我无法在渲染响应阶段执行此过程,因为我有一个依赖于处理的动态包含。是否有一个事件侦听器或阶段侦听器可用于此目的?您可以使用编程阶段侦听器,我假设您使用的是JSF2。下面的类将在应用程序中加载阶段侦听器 @ManagedBean(eager = true) @ApplicationScoped public class SomeClass implements Serializable { @Pos
@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;
}
您可以使用编程阶段侦听器,我假设您使用的是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;
}
托管bean的
@PostConstruct
究竟有何不足之处?include将根据我传递到bean中的get参数动态进行,该参数在UpdateModelView阶段设置到托管bean中。我不确定在此阶段之前是否会调用@PostConstruct。只需确保在@PostConstruct
中设置了param并可用。该属性是通过f:viewParam自动设置的当前属性。在这种情况下,我必须手动提取请求参数吗?托管bean的@PostConstruct
到底有多不足?include将根据我传递到bean中的get参数动态进行,该参数在UpdateModelView阶段设置到托管bean中。我不确定在此阶段之前是否会调用@PostConstruct。只需确保在@PostConstruct
中设置了param并可用。该属性是通过f:viewParam自动设置的当前属性。在这种情况下,我必须手动提取请求参数吗?OP需要在视图生成期间运行代码(因为ui:包含视图生成期间而不是视图渲染期间的运行)。该代码允许我在渲染响应阶段之前插入侦听器。Thank.OP需要在视图生成期间运行代码(因为ui:包含视图生成期间而不是视图渲染期间的运行)。该代码允许我在渲染响应阶段之前插入侦听器。谢谢