2007-11-01から1ヶ月間の記事一覧

一覧、削除のアクションクラス

更新・追加のアクションと一覧系ではアクションを分けた。その一覧側のアクション ※Pagerクラスは殆ど何もしないUtilityクラスtutorial.UserListAction.java package tutorial; import java.util.LinkedList; import java.util.List; import java.util.Map; …

国際化対応で更新・追加共用のJSP

UserActionの為のJSPページ、確認画面用も殆ど同じ 同じ条件の s:if が何回も出てくるのでもう少し工夫したいがひとまず。/jsp/edit.jsp <%@page contentType="text/html; charset=UTF-8" %> <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="t…

Spring側のStrutsアクション生成

特に特別なことは無いが、UserActionのスコープを "request" とすることぐらい Springのbean名をstruts.xmlで指定しているクラス名に一致させればアクションをSpringで生成してくれる また、Springから初期化されるのでコンストラクタ引数を指定することもで…

追加/更新の為のアクション

追加/更新の為の事前確認機能を含めたアクションのJAVAコードは次のような感じで行こうと思う。 HTTPやSESSIONなんちゃらとかの汚染がないすっきり(しすぎ)のコード ※ParamUtilはなんでもないUtilityクラス また、一覧、削除のアクションは別アクションク…

Interceptorのパラメータをオーバーライドする

Interceptorのパラメータを変えたい場合は Interceptor のインスタンスを別に名前を付けて作成する必要があると思っていたが、アクション定義中で変えることができるようだ。こうやって <interceptor name="role_user" class="jp.co.hershe.struts2.acegi.AuthzInterceptor"> <param name="allowedRoles">ROLE_USER</param> </interceptor> <interceptor-stack name="default_user"> </interceptor-stack>

Exceptionオブジェクトの参照

global-exceptionで例外補足した場合、ValueStackには "exception" と "exceptionStack"の2つが積まれていて、 exception は例外オブジェクトそのもの、 exceptionStack はスタックトレースの文字列表現となっているexceptionは例外オブジェクトそのものな…

フレームワークの標準インターセプター呼び出し順序

次の順での呼び出しとしている。 <interceptor-stack name="transact" > <interceptor-ref name="chain"/> <interceptor-ref name="alias"/> <interceptor-ref name="staticParams"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="i18n"/> <interceptor-ref name="locale" /> <interceptor-ref name="exception"/> </interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-stack>

staticParamsインターセプターの使い方

staticParamsインターセプターを使用すると、struts.xmlからアクションにパラメータを渡すことが出来る次のようにアクションに staticParamsを指定し、param を指定すると <action name="user_edit" class="UserAction"> <interceptor-ref name="staticParams"/> <param name="preread">true</param> </action> アクションの setPrereadメソッドが "true"引数で呼び出される public class…

バリデーションのエラーメッセージ

message resource中で範囲制限値を参照するには次のように記述する例えば salary フィールドの validation が 数値範囲の次のような場合 <field name="salary"> <field-validator type="required"> <message key="errors.required.salary"/> </field-validator> <field-validator type="double"> <param name="minInclusive">100</param> <param name="maxInclusive">5000…</param></field-validator></field>

expression型のvalidation

validation定義で expression 型はクライントバリデーションされない。 expressionにはOGNL式が書けるのでJavaScriptには変換できないし無理だろうなと、思ったとおりだった。 form-close-validate.ftl のコードを見ると、独自のJavaScriptチェックを追加す…

入力フォーム

クライアントバリデーション付きの入力フォームは次のように書く。よく初期値を value で明示しているサンプルを見るが、勝手に取ってきてくれるのでValueStackに乗ってる値が初期値で問題なければ改めて指定する必要はない。 テーマによっては勝手に tr, td…

OGNL名前付きオブジェクト

Struts2のOGNLでは次の名前付き変数が参照できる parameters request session application attr これらは頭に # を付けることで参照できる、#をつけない場合はルートオブジェクト(つまりValueStack)への参照となるattr は request/session/application を…

redirect-after-postの実現

Struts2ではstruts.xml中でOgnl式が書けるのでredirect-after-postは簡単に実装できる何もパラメータを渡さない場合 redirect-actionは次のように書くが <result type="redirect-action">user_edit</result> redirect先にパラメータを渡す場合は次の様に書く、actionName, namespace以外のparamは全て…

テスティングフレームワークをTestNGからJUnit4に変更する

当初TestNGで環境を整備する予定だったが、TestNGには簡単に使えるテストのカバレッジ測定ツールが見つけられなかった。 JUnitであればdjUnitというJUnitのテストケースがそのまま使えてカバレッジもEclipse上でビジュアルに確認することが出来るツールがあ…

JSPでのValueStackの参照

JSPのresultページには action のオブジェクトとmodel(ModelDrivenの場合)が積まれていて後から積まれた方から順にスタックを遡って目的のものが見つかるまで探索してくれる。 スタックの途中から探索したい場合は配列のインデックス指定をすることで可能。 …

設定ファイルの場所

TestNGのテスト実行とWEBアプリケーションの実行双方であまり設定などをいじらずに共用したいが、今までの置き場所だとTestNGでのテスト時に設定が読めなかったので場所を調整。 WEB-INF/ classes/ applicationContext.xml -- spring設定 sqlMapConfig.xml -…

関連システムJar一覧

今の /WEB-INF/lib 下の Jar は次のとおり acegi-security-1.0.5.jar acegi-security-catalina-1.0.5.jar acegi-security-tiger-1.0.5.jar aspectjrt.jar aspectjweaver.jar cglib-nodep-2.1_3.jar commons-beanutils-1.7.0.jar commons-collections-3.1.jar…

Message Resoureの検索順序

・アクションクラス名 ・アクションの基底クラス名 ・アクションのインターフェース名 ・ModelDrivenのモデルクラス名 ・アクションのパッケージ ・グローバルリソース の順で検索されることになっている。 例えばこのようなアクションクラスの場合tutorial.…

BeanのProxy作成で問題

Acegiの@Securedアノテーションを処理するために、SpringでStruts2のアクションBeanのProxyを作成し、Acegiの認可チェックInterceptorでチェックをさせようと考えていたが、Proxyを作成するとProxy側では基のクラスのAnnotation情報が欠落してしてまい、Stru…

SpringでTestNG 2

webアプリケーション用の applicationContext.xml を使って単体テストしようとすると "request"や"session"のスコープが無いって怒られて読み込めない問題発生。 ちょっと他の方法が見つからなかったので仕方なくSpringのスコープカスタマイズ機能を利用し自…

SpringでTestNGを使う

SpringではデフォルトのサポートはJUnitであり、 spring-mock.jar に含まれている org.springframework.test.AbstractDependencyInjectionSpringContextTests などのヘルパクラスはJUnitに依存しているため使用できない。 TestNGに付属している spring の下…

User CRUD操作のDAO

Springの iBatisサポートを使うので殆ど何も難しいことは無いtutorial.UserDAO.java

Struts2でのvalidation設定

Struts2での validation を行うには action クラスと同じ階層に action名-validation.xml をというファイルを用意して、Struts2のアクションのインターセプタで workflow と validation を入れると有効になり、エラーが発生した場合は "input" が resultとし…

Struts2で例外を捕捉してエラーページを表示する方法

global-exception-mappings で例外の種類と例外が発生したときに返却する result値を設定し、 global-results で result値に対する処理を記述すればいい。 もちろん global では無く個別のアクションで設定することも出来る。 例外捕捉の順番は具体的なもの…

Acegiのフィルター設定

認証、認可チェックはStruts側でやるのでAcegiでやるのは コンテキストをHTTPリクエストをまたいで有効にするための処理と、未ログイン時はAnonymousユーザーで認証されているようにするフィルター ※認証、認可をStruts側でやる意味は例外処理とか統一的にSt…

認証は Struts2 のアクションで独自に行う

認証の仕組みがAcegiにも当然用意されているが、設定ファイルにSQLを書いたり、Glueコード書いたりなんかしっくり来ない。 んでGlueコード書くぐらいならおんなじらいのコード量で済むんだから自分で書いた方が見通しが良い。パスワードチェックしてOKだった…

iBatisでデバッグ中のSQL変更

デバッグ中はSQLを頻繁に変更するけど、アプリケーションを再起動しないと変更が反映されない、これはつらい。 そこで、毎回読み直してくれる設定に強引にするまず Spring の applicationContext.xml で iBatis と dao を sigleton ではなく prototype にする

formでjavascriptのvalidationを有効にするともの凄く遅い

これはエラーメッセージを外部リソース化していて struts.devMode が true の場合毎回メッセージリソースを読み直すからみたい。 開発中はメッセージも頻繁に調整するのでこれはこれでありがたい。devModeを false とすればメッセージリソースはキャッシュさ…

TOMCATでのsession情報のJDBCStore

Context.xml に次のように書くとセッションをDBに保存するようになる ( Experimental なようなので実運用するには十分テストしないといけませんね ) Apache Tomcat Configuration Reference - The Manager Component Postgresのドライバを利用する場合の設…

AcegiでのAnnotation ベースのメソッドセキュリティ設定

applicationContext.xml に次の設定を追加