LoginSignup
2
3

More than 5 years have passed since last update.

Struts2の内部オブジェクト(1) ActionContext

Posted at

Struts2の内部オブジェクトとは

Struts2の内部オブジェクトとは、Struts2が動作する上で必要な設定・情報・サーブレットとの関連情報を扱えるオブジェクトたちで、ユーティリティとして使えるものです。

便利な機能が内包されており、中にはActionクラス以外にもStruts2が動作していればどこでもアクセスできる利点があります。

ActionContext

一番よく使うクラスです。インターセプタやViewの共通化でも使え、Struts2がActionクラスを実行した結果やView層に渡すときの情報一式にアクセスできます。

ActionContextの取得

ActionContext actionCtx= ActionContext.getContext();

ActionContextの取得は、Struts2が動作するクラスであればどこでも取得可能です。

例えば、Validationの実装クラス、set/getのみ実装しているDTO、POJOになっているロジック、果ては他のフレームワーク管理下にある実装クラスでも可能です。

Actionクラス名が受け取ったリクエストパラメータを取得する

Map<String,Object> parameters = actionCtx.getParameters();

パラメータ名はMapのキーです。リクエストパラメータの内容を再取得したい場合に使います。

Actionクラスを実行するインスタンスを取得する

ActionInvocation invoker = actionCtx.getActionInvocation();

Actionクラスの実行を命令できるインスタンスを取得します。 invoke()でActionクラスが動き、Actionクラスの実行結果 result のStringを受け取れます。インターセプタを自作し、Actionクラスの実行制御する場合に使います。

Actionクラスの実行~View層で利用する情報を取得する

Struts2内部ではサーブレットのスコープ以外に独自のデータ領域を持っており、これをValueStackと呼んでいます。
このValueStackはStruts2標準ではOGNL式でアクセスできるOgnlValueStackを扱います。このOgnlValueStackはActionクラスのフィールドにアクセスできます。これによりActionクラスの実装しているインタフェース(Aware)次第で、フィールドエラー情報やセッション情報などもActionクラス経由で取得可能です。

ValueStack valueStack = actionCtx.getValueStack();
Object value = valueStack.findValue("dto.username", true);

OGNL式でActionクラスのフィールド名を指定できますので、ネストしたオブジェクトも参照できます。

自動型変換エラーを取得する

Struts2はリクエストパラメータを、Actoinクラスのフィールドへ自動型変換します。サーブレット仕様のリクエストパラメータはStringないしはString[]になりますが、これがActionクラスのフィールドに合わせて型変換を試行します。そのときに変換できなかった(例えばInteger型のフィールドに対して、パラメータが abc だったなど)場合には、型変換エラーとしてStruts2内部で蓄積し、Actionクラスのフィールドには何も反映されません。

この型変換エラー情報を取得できます。

Map<String,Object> convertionErrors = actionCtx.getConversionErrors();

View層、テンプレートクラスで型変換失敗をしたパラメータを出力するときに使います。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3