「Interceptorでアクションクラスを知るには」の版間の差分
提供: tknotebook
| 5行: | 5行: | ||
インターセプターで処理を書く際、インターセプターで処理後、どのアクションクラスでアクションを処理するか | インターセプターで処理を書く際、インターセプターで処理後、どのアクションクラスでアクションを処理するか | ||
知る必要がある場合があります。 | 知る必要がある場合があります。 | ||
| + | |||
| + | インターセプターの interceptメソッドの中で、 | ||
| + | ActionInvocation#getAction でアクションのクラスが取得できます。 | ||
例えば未ログインの場合、アクションを実行せず強制的にログイン画面へ飛ばすインターセプターを書く場合、 | 例えば未ログインの場合、アクションを実行せず強制的にログイン画面へ飛ばすインターセプターを書く場合、 | ||
2017年1月15日 (日) 17:56時点における版
メインページ>コンピュータの部屋#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();
}
}