Interceptorでアクションクラスを知るには
提供: tknotebook
メインページ>コンピュータの部屋#Java>Struts2 Tips
インターセプターで処理を書く際、インターセプターで処理後、どのアクションクラスでアクションが処理されるか
知る必要がある場合があります。
例えば未ログインの場合、アクションを実行せず強制的にログイン画面へ飛ばす、ログインチェックインターセプターを書くとしましょう。
ログイン画面のログインアクションの処理では、ログインチェックは無意味なので、ログインチェックインターセプタは未ログインでもアクションを呼び出す必要が有ります。
その処理をコードにすると下記のような具合になります。 インターセプターからアクションの処理クラスのインスタンスは ActionaInvocation#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)) {
// ログイン画面のアクションなら次のインターセプター(orアクション)へ
return invocation.invoke();
} else {
// ログイン画面のアクションでなければ、アクションはスキップしてログイン画面の表示を促す文字列を返す
return "login";
}
return "login";
} else {
// ログイン中なら次のインターセプター(orアクション)を呼び出す。
return invocation.invoke();
}
}