HI,
我正在寻找一个可以跳过生命周期中某些阶段的场景。我见过跳过这些的代码。但是,我严重怀疑我在哪里可以写出这种逻辑。
是在ManagedBean还是PhaseListener?
寻找答案。
答案 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;
}
}
我确信这种做法存在根本性的错误,所以请发表评论。