【发布时间】:2011-12-20 08:38:29
【问题描述】:
我的问题与here 类似,但不涉及PrimeFaces。另外,我在那里找不到真正的解决方案。
我基本上是在尝试让 phaselistener 重定向到登录页面,以防没有 JSF 会话(例如,当会话超时时)
我正在尝试从 JSF 2 Phaselistener 中重定向。总结一下,我在做的是这样的:
public void beforePhase(PhaseEvent event) {
PhaseId id = event.getPhaseId();
if(id.equals(PhaseId.RESTORE_VIEW)){
FacesContext context = event.getFacesContext();
Map<String, Object> sessionMap = context.getExternalContext().getSessionMap();
if(sessionMap==null || sessionMap.isEmpty()){
// No Session, Redirect to login
try {
context.getExternalContext().redirect("/login");
} catch (Exception e) {
...
}
}
}
}
当重定向代码运行时,我得到了这个异常:
java.lang.NullPointerException
at org.apache.myfaces.context.servlet.PartialViewContextImpl.getPartialResponseWriter(PartialViewContextImpl.java:301)
at org.apache.myfaces.context.servlet.ServletExternalContextImpl.redirect(ServletExternalContextImpl.java:452)
at com.AuthenticationPhaseListener.userIsNotLogedIn
这可能是什么原因造成的?我做错了吗?
谢谢!
【问题讨论】: