「Interceptorでアクションクラスを知るには」の版間の差分
提供: tknotebook
(1人の利用者による、間の1版が非表示) | |||
3行: | 3行: | ||
− | インターセプターで処理を書く際、インターセプターで処理後、''' | + | インターセプターで処理を書く際、インターセプターで処理後、'''どのアクションクラスでアクションが処理されるか''' |
知る必要がある場合があります。 | 知る必要がある場合があります。 | ||
− | + | 例えば未ログインの場合、アクションを実行せず強制的にログイン画面へ飛ばす、ログインチェックインターセプターを書くとしましょう。 | |
− | + | ||
+ | ログイン画面のログインアクションの処理では、ログインチェックは無意味なので、ログインチェックインターセプタは未ログインでもアクションを呼び出す必要が有ります。 | ||
+ | |||
+ | その処理をコードにすると下記のような具合になります。 | ||
+ | インターセプターからアクションの処理クラスのインスタンスは | ||
+ | ActionaInvocation#getAction で簡単に取得できます。 | ||
− | |||
− | |||
− | |||
@Override | @Override | ||
22行: | 24行: | ||
// 未ログインの場合 | // 未ログインの場合 | ||
if (invocation.getAction().getClass().equals(Login.class)) { | if (invocation.getAction().getClass().equals(Login.class)) { | ||
− | // ログイン画面のアクションなら次のインターセプター( | + | // ログイン画面のアクションなら次のインターセプター(orアクション)へ |
return invocation.invoke(); | return invocation.invoke(); | ||
} else { | } else { | ||
− | // | + | // ログイン画面のアクションでなければ、アクションはスキップしてログイン画面の表示を促す文字列を返す |
return "login"; | return "login"; | ||
} | } | ||
return "login"; | return "login"; | ||
} else { | } else { | ||
− | // | + | // ログイン中なら次のインターセプター(orアクション)を呼び出す。 |
return invocation.invoke(); | return invocation.invoke(); | ||
} | } | ||
} | } |
2017年1月17日 (火) 03:39時点における最新版
メインページ>コンピュータの部屋#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(); } }