Struts2

ActionにCGLIBでAOPを適用する

ActionクラスにSpring AOPを適用する場合、XWorkのInterceptorとの相性とか、なにか問題が発生するのではないか?ということで試してみました。 Actionクラスはインターフェースを定義していないので、SpringのAOPを利用するにはCGLIBを使うことになります(…

CGLIBで@SkipValidationが効かない

Springに登録したActionクラスにCGLIBプロキシでAOPを適用すると、@SkipValidationが無視されてしまいます。その結果、本来は@SkipValidationするはずのメソッドがバリデーションされてしまい、以下のようなinputのマッピング定義がない!というエラーが発生…

StrutsSpringObjectFactoryの処理内容

org.apache.struts2.spring.StrutsSpringObjectFactoryは、下記のStruts2用インターフェースを実装したオブジェクトを、Springで生成させることができます。 com.opensymphony.xwork2.Action com.opensymphony.xwork2.interceptor.Interceptor com.opensymph…

StrutsとSpringを連携させる

Struts2はSpringに簡単にインスタンス管理をお任せすることができます。 注意すべきはActionのインスタンスモード。Struts2のアクションはステートを持つので、prototypeかrequestにしないと洒落になりません。 ライブラリの取得 必要なライブラリは、struts…

Actionの実行時間をログ出力 ‐TimerInterceptor

xwork2のTimerInterceptorは、以下のようにActionの実行時間をログに出力できます。 2007-05-18 14:25:51,711 INFO [http-8080-Processor23] [com.opensymphony.xwork2.interceptor.TimerInterceptor] - Executed action [/catalog/list!list] took 1500 ms.…

Actionの起動〜終了をログ出力 ‐LoggingInterceptor

xwork2のLoggingInterceptorを定義すれば、INFOレベル(固定;変更不可)で、以下のような起動と終了ログが出力させることができます。 2007-05-18 14:25:51,711 INFO [http-8080-Processor23] [com.opensymphony.xwork2.interceptor.LoggingInterceptor] - …

開発モード(devMode)かどうかを取得する

static boolean devMode = false; @Inject("devMode") public static void setDevMode(String mode) { devMode = "true".equals(mode); } public boolean isDevMode(){ return devMode; } 例えば、開発モードの場合に例外の詳細を出力するJSPは以下のように…

例外を一括処理する- ExceptionMappingInterceptor

ExceptionMappingInterceptorを利用すれば、アプリケーションで処理されない例外をエラーログに出力して専用のエラー画面に遷移させることができます。ExceptionMappingInterceptorは、ValueStackに例外情報とスタックトレースをPushします。具体的にはPush…

セッションへのアクセス

Struts2では、SessionMapを利用してセッション情報にアクセスします。SessionMapはMapインターフェースの実装なので、ServletAPIに依存しません。SessionMapを取得するには、ActionContextかSessionAwareを利用します。 ActionContext Map session = (Map) A…

分割したファイルからパッケージを参照できない

分割したファイルからパッケージをextendすると、実行時に以下のエラーが発生して起動できないという問題が発生します。 2007-05-14 14:20:25,131 ERROR [main][com.opensymphony.xwork2.config.ConfigurationUtil] - Unable to find parent package myapp-e…

JSPからActionを呼び出す方法

GETで呼び出す場合 GETでActionを呼び出すには、以下のようにを利用します。 またURLパラメータを送る場合には、を使います。 <s:if test="%{pager.prev}"> <s:url id="prevListUrl" action="list"> <s:param name="offset" value="%{pager.prevOffset}" /> </s:url> <s:a href="%{prevListUrl}">Prev</s:a> </s:if> <s:if test="%{pager.next}"> </s:if>

パフォーマンスチューニング(翻訳)

Struts2の本家にある『Apache Struts 2 Documentation - Performance Tuning』を翻訳してみました。 logging と devModeを無効にしてください。 DevModeでは、設定のリロードと関連ファイルの検査を行うことができます。しかし、これらはリクエストごとに実…

日本語を処理するための設定

Struts1ではServletFilterで文字コードを指定するのが普通でしたが、Struts2ではstruts.propertiesにencodingとロケールを正しく指定します。指定した値を使ってorg.apache.struts2.dispatcher.FilterDispatcherがRequestを処理してくれます。 struts.locale…

インストールからHelloWorld

EclipseのWTPプロジェクトを作成して、Struts2でHelloWorldをだすところまで。30分〜1時間ぐらいでできます。 少しはまったのは、struts.xmlの配置場所。デフォルトではWEB-INFの下ではなくてクラスパス上に配置する点に注意が必要です。 [前提] Java5、E…