Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 呈现响应阶段之前的JSF事件侦听器_Jsf 2_Lifecycle - Fatal编程技术网

Jsf 2 呈现响应阶段之前的JSF事件侦听器

Jsf 2 呈现响应阶段之前的JSF事件侦听器,jsf-2,lifecycle,Jsf 2,Lifecycle,我希望在到达呈现响应阶段之前首次加载表单时,在JSF视图范围的支持bean中进行一些处理。我无法在渲染响应阶段执行此过程,因为我有一个依赖于处理的动态包含。是否有一个事件侦听器或阶段侦听器可用于此目的?您可以使用编程阶段侦听器,我假设您使用的是JSF2。下面的类将在应用程序中加载阶段侦听器 @ManagedBean(eager = true) @ApplicationScoped public class SomeClass implements Serializable { @Pos

我希望在到达呈现响应阶段之前首次加载表单时,在JSF视图范围的支持bean中进行一些处理。我无法在渲染响应阶段执行此过程,因为我有一个依赖于处理的动态包含。是否有一个事件侦听器或阶段侦听器可用于此目的?

您可以使用编程阶段侦听器,我假设您使用的是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;
}

您可以使用编程阶段侦听器,我假设您使用的是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:包含视图生成期间而不是视图渲染期间的运行)。该代码允许我在渲染响应阶段之前插入侦听器。谢谢