私の問題はhereと似ていますが、何らかの形でPrimeFaces
は含まれていません。また、私は本当の解決策を見つけることができませんでした。JSF phaselistenerからのリダイレクトに失敗しました
(例えば、セッションがタイムアウトした場合には、)は、JSFセッションが存在しない場合のログインページにリダイレクトするのPhaseListenerを取得しようとしている
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
これを引き起こしている可能性が何を?私はこれを間違っているのですか?
ありがとう!
しかし、私はどのようにフィルタ内からJSFのセッション状態をチェックしますか? – Ben
'request.getSession(false)'だけです。 JSFは、基本的にServlet APIの基本的な抽象レイヤーです。 'ExternalContext#getSessionMap()'は 'HttpSession'の属性に対応しています。 – BalusC