JSF 2 アプリケーションがあり、 で次のように構成しましたweb.xml
。
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/error.html</location>
</error-page>
テスト目的で、セッションがすぐに期限切れになるようにするために@SessionScoped
、 init メソッド内のクラスに次のコードをアノテーションで付けています。@PostConstruct
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
HttpSession session = (HttpSession) ec.getSession(false);
session.setMaxInactiveInterval(5);
今、私が持っているh:commandButton
とoutcome = "somepage.jsf"
、5秒後にクリックするとエラーページにリダイレクトされます。
代わりに Bean アクションを呼び出すか、action
属性を使用してまったく同じボタンでページ名を実行するViewExpiredException
と、サーバーのログに が表示されますが、リダイレクトは発生しません。
どうしてこんなことに?また、セッションの有効期限が切れた後に行われたアクションに関係なく、一般的に別のページにリダイレクトする方法は?