Develop with pleasure!

福岡でCloudとかBlockchainとか。

Struts2

リクエストパラメータによる実行Actionの変更。

Struts2のActionMapperは送られてきたHTTPリクエストからStruts2の実行Actionをマッピングするクラス。(ActionMapper自体はインターフェース)デフォルトでは、org.apache.struts2.dispatcher.mapper.DefaultActionMapperが使用される。変更したい場合は、s…

FreeMarkerのテンプレートファイルのロード処理を変更する。

Struts2+FreeMarkerの連携では、FreeMarkerのテンプレートファイルはweb.xmlで <context-param> <param-name>templatePath</param-name> <param-value>C:/hoge/template</param-value> </context-param> な感じで指定する。 Struts2では、この設定をorg.apache.struts2.views.freemarker.FreemarkerManagerが読み込み、テンプレートファイルをロ…

バリデーションエラーメッセージのレイアウト変更。

画面入力値のバリデーションの結果エラーになった場合、入力画面にその旨をエラーメッセージとして表示する。 Struts2+FreeMarkerでは、タグでエラーメッセージを画面に表示できるが、デフォルトのエラーメッセージは <ul><li>hogeが入力されていません。</li></ul> というレ…

バリデーション

Struts2で入力値にバリデーションをかける。基本的な仕組みはStruts Classicの頃と変わっていない。変わったのは、 バリデーションの設定ファイルは、Actionと同じ階層で「action名-validation.xml」という命名規則でAction単位に作成する。 エラーメッセー…

Sitemesh+Freemarker

Tiles+FreeMarkerの構成だと、FreeMarker内でTilesのtaglibを使用することとなり、Servletコンテナを必要とし、FreeMarkerのローカルリソースを参照する機能が有効にならない。そのため、これを機にレイアウトエンジンをTiles→Sitemeshに変更してみた。 以…

FreeMarker+Tiles連携でローカルリソースが参照できない。

http://d.hatena.ne.jp/techmedia-think/20080612 で、FreeMarkerとTilesの連携はできたけど、Tilesと連携するとFreeMarkerで作成した画面のftlファイルをwar内部に配備せずに、ローカルリソースにした場合、ファイルが見つからなくなった…。FreeMarker単体…

FreeMarker内でTilesのタグを利用する。

Struts2でViewの構成をTiles+FreeMarkerにするときの構成。まず、クラスパスに以下のjarを追加する。 tiles-core.jartiles-jsp.jartiles-apistruts2-tiles-plugin.jar続いて、web.xmlにTilesのリスナーとtilesのtaglib定義する。tiles-jsp.tldは、tiles-jsp…

VelocityからFreeMarkerへ

Struts2に触れるまでFreeMarkerというテンプレートエンジンが存在したことを知らなかった。いろいろググってみると、Velocityよりも機能的に洗練されてそうなので、ViewコンポーネントをVelocityからFreeMarkerへ変更してみた。基本的に、ActionのResultType…

エラーログの捕捉

Struts2では、ExceptionMappingInterceptorで例外発生時に発生した例外により遷移先を制御可能だが、このExceptionMappingInterceptorで捕捉した例外の情報をログ出力することもできる。ExceptionMappingInterceptorのソースを見れば明らかだが、 protected …

自作Interceptorで発生した例外の捕捉

Struts2のActionに適用するInterceptorを独自に作成してstruts.xmlに定義してみた。 <interceptors> <interceptor name="validTransitionChecker" class="ValidTransitionCheckInterceptor"/> <interceptor-stack name="customStack"> <interceptor-ref name="validTransitionChecker"/> <interceptor-ref name="defaultStack"/> </interceptor-ref></interceptor-ref></interceptor-stack></interceptor></interceptors>

Struts2で例外を捕捉する

Struts Classicの時はAction内で発生した例外は、ExceptionHandlerで捕捉していたが、Struts2からは例外の捕捉もInterceptorが行う。 ExceptionMappingInterceptorというInterceptorがその役割をする。ちなみにこのクラスsturts-coreではなく、xwork2のjarに…

Struts2は基本的にInterceptorで処理が進んでいく。HTMLパラメータをActionにセットするのもInterceptor。 入力値のバリデーションを行うのもInterceptor。 2重サブミット検知のためのTokenによるチェックもInterceptor。といった感じで、デフォルトで多くの…

ResultType

Struts2では、Viewテクノロジがデフォルトで色々と選択できる。Struts1.x系のstruts-config.xmlと言うと、 action-mappingに定義するActionからの遷移先の定義にresult-typeというのが設定できるようになった。 (ZeroConfigurationの場合はActionクラスに定…