「Interceptorでアクションクラスを知るには」の版間の差分

提供: tknotebook
移動: 案内検索
7行: 7行:
  
 
インターセプターの interceptメソッドの中で、
 
インターセプターの interceptメソッドの中で、
ActionInvocation#getAction でアクションのクラスが取得できます。
+
ActionInvocation#getAction メソッドでアクションのクラスが取得できます。
  
 
例えば未ログインの場合、アクションを実行せず強制的にログイン画面へ飛ばすインターセプターを書く場合、
 
例えば未ログインの場合、アクションを実行せず強制的にログイン画面へ飛ばすインターセプターを書く場合、

2017年1月15日 (日) 17:57時点における版

メインページ>コンピュータの部屋#Java>Struts2 Tips


インターセプターで処理を書く際、インターセプターで処理後、どのアクションクラスでアクションを処理するか 知る必要がある場合があります。

インターセプターの interceptメソッドの中で、 ActionInvocation#getAction メソッドでアクションのクラスが取得できます。

例えば未ログインの場合、アクションを実行せず強制的にログイン画面へ飛ばすインターセプターを書く場合、 ログイン画面のログインアクションでは、ログイン画面へ飛ばすのは無意味でログインアクション処理を行うべきです。 その処理をコードにするとこんな具合になります。

@Override
public String intercept(ActionInvocation invocation) throws Exception {

    Map<String, Object> session = invocation.getInvocationContext().getSession();
    String loggedUser = (String) session.get("loggedUser");

    if (loggedUser == null) {
        // 未ログインの場合
        if (invocation.getAction().getClass().equals(Login.class)) {
            // ログイン画面のアクションなら次のインターセプター(アクション)へ
            return invocation.invoke();
        } else {
            // ログイン画面のアクションでなければ、アクションはスキップしてログイン画面へ
            return "login";
        }
        return "login";
    } else {
        // ログイン中ならアクションを呼び出す。
        return invocation.invoke();
    }
}