如何跳过JSF应用程序中的阶段?

时间:2010-12-26 07:03:00

标签: jsf

HI,

我正在寻找一个可以跳过生命周期中某些阶段的场景。我见过跳过这些的代码。但是,我严重怀疑我在哪里可以写出这种逻辑。

是在ManagedBean还是PhaseListener?

寻找答案。

3 个答案:

答案 0 :(得分:2)

FacesContext有一个方法responseComplete(),它将响应标记为完成。它还有renderResponse()跳转到渲染响应阶段。

我正在尝试在“还原前视图”阶段使用这些并遇到问题。在恢复视图之后,它们看起来很好。

答案 1 :(得分:1)

immediate=true添加到您的操作组件"skips" a phase。你不能做更多。

  

许多开发人员认为在组件上使用立即标志会跳过“过程验证”阶段。它没有。立即使用的是导致在“应用请求值”阶段中处理组件。

答案 2 :(得分:-1)

我希望能够访问GAE任务队列的自定义请求处理程序上的FacesContext。该任务是通过构建一个post请求创建的,我不知道如何创建ViewState参数。我按照FacesContext.responseComplete()中的理查德建议使用PhaseListener。我需要跳过其余的阶段,因为URL没有映射到任何文件,而且我正在监听器中完成所有工作。

public class TaskPhaseListener implements PhaseListener {

    @Override
    public void beforePhase(PhaseEvent event) {
        FacesContext context = event.getFacesContext();
        if ("/taskUrl".equals(context.getExternalContext().getRequestPathInfo())) {
            Map<String, String> params = context.getExternalContext()
               .getRequestParameterMap();
            // do the task here and skip the rest of the phases
            context.responseComplete();
        }
    }

    @Override
    public void afterPhase(PhaseEvent event) {
    }

    @Override
    public PhaseId getPhaseId() {
        // only interested in first phase
        return PhaseId.RESTORE_VIEW;
    }

}

我确信这种做法存在根本性的错误,所以请发表评论。