忍者ブログ
29 March

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

29 November

【Java/Struts】エラー→ログアウト。エラーを判定したActionでログアウト後用のメッセージを付けたい。

お久しぶりのブログ更新です。Javaにスキルチェンジなう。今回はその勉強中の覚書です。

***

前提として、このActionは、session.invalidate()するのが主な目的です。
リダイレクトは、リクエストを引き継がないし、session.invalidate()しちゃったら、引き継ぐためのメモリがなくなっちまうし、どうしようってなもんです。

ログアウトすべきエラーを各Actionでキャッチしたら、LogoutActionのインスタンスを紐づけたログアウト用のアクションに、リダイレクトするようにしています。

リダイレクト手前で、ログアウト後のページに表示したいエラーをsaveErrors(session, errors)してます。

そうすると、session.getAttribute("org.apache.struts.action.ERROR")で、そのエラーが取り出せるって寸法です。getAttributeNames属性で、それっぽいのを使っただけです。

LogoutAction.java(パッケージ名は適当)

import jp.suppa.co2;

import javax.servlet.http.*;
import org.apache.struts.action.*;

public class LogoutAction extends Action {
// メッセージID(「ログアウトしました」)
private static final String MESSAGE_ID = "message.XXX";

@Override
public ActionForward execute(ActionMapping mapping,
                                                ActionForm form,
                                                HttpServletRequest request,
                                                HttpServletResponse response)
                                                throws Exception {

    /*
    * 別ページでセッションに保存されたメッセージを取り出し、
    * リクエストに保存しなおす。
    */
    HttpSession session = request.getSession();
    ActionErrors errors =                             (ActionErrors)session.getAttribute("org.apache.struts.action.ERROR");                     saveErrors(request, errors);

    /*
    * セッション情報を畳む。
    */
    if (session != null) {
        session.invalidate();
    }

    /*
    * 「ログアウトしました」の文言を付ける
    */
    ActionMessages massages = new ActionMessages();
    massages.add("massages.logout", new ActionMessage(MESSAGE_ID));
    saveMessages(request, massages);

    // ログアウトページへ
    return new ActionForward(mapping.getForward());
}

}

拍手

PR