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

annotationWorkflowのAnnotationメソッドはfinalに

次のような親子クラスで、双方とも @Before で annotation とした場合 public class A { @Before public String before() { System.out.println( "before-A" ); } } public class B extends A { @Before public String before() { System.out.println( "befo…

継承されたアクションクラスでの@Before Annotation

継承されたActionクラスで@BeforeなどのAnnotationがどのような振る舞いになるのか試してみたUserActionを継承したUserAction2を作ってUserActionとしてbean登録する package tutorial; import jp.co.hershe.struts2.util.Struts2Action; import org.springf…

annotationWorkflowの使い方

annotationWorkflowを有効にして、annotationを使うと次のタイミングでメソッドが実行できる。 annotation 実行タイミング 使えそうなシーン @Before アクションが実行される直前 投げられたパラメータによって初期化されるオブジェクトの生成とかに @Before…

workflowとannotationWorkflowについて

annotationWorkflowはannotationに従い、actionメソッドの実行前後に特定のメソッドを実行できるようにするもの。 workflow は validatableとvalidationAwareを処理するものとなっている。 上の通り annotationWorkflow は workflow とは名前は似ているが、…

if タグのネスト

Struts2の s:if タグはネストすることが出来る if ( test1 ) { if ( test2 ) { a } else { b } } else { c } このような条件は <s:if test="test1"> <s:if test="test2"> a </s:if> <s:else> b </s:else> </s:if> <s:else> c </s:else> そのままこう書けばOK

comboboxタグ

テキスト入力と selectタグを併せたような combobox コントロールというのがある。 これは、指定するオプションもテキスト入力と select を併せたものとほぼ同じ次のように出力させることが出来る <s:combobox list="mediaList" listKey="type" listValue="type" name="media" key="label.media" /> ちょっとTIPS:fieldとselectの間の <br/> を変更するオプション</br/></s:combobox>…

paramのorderedオプション

ParametersInterceptor には ordered というオプションがある。通常パラメータはアルファベット順にプロパティとして設定される事になっていて、 a b.a b.b cのような順序でセットされるordered が指定されていると、"."の少ないほうから先に呼び出されるよ…

ネストしたパラメータ

フィールド名に "." が含まれると、ネストしたパラメータと解釈される。 例えば、 JSP中で <s:textfield name="nest.a" label="nest" /> というフィールドがあったとすると、ValueStack を次のように実行した結果が初期値として設定される getNest().getA() また、ParametersInterceptorにより投げられ</s:textfield>…

iBatisの結果の格納型

結果の格納はデフォルトでは ArrayList になるようだ。1対多の多側や結果の一覧も ArrayList となっている。 これを別の List の実装、例えば LinkedList や独自の List 実装に換えるためには resultObjectFactory で指定をしないといけないようで、現在調…

CookieInterceptorについて2

以前CookieInterceptorについて調べた時(CookieInterceptorについて - Struts 2+Spring 2+Tiles+Acegi+iBatis+GWT+JUnit 4+JMockit でフルスタックJAVAフレームワーク)には、これはSetする場合に結局ActionがHttpCookieとかで汚染されてしまうので、あまり…

独自ヘッダーを返すtempl2の使い方

このResultを使うと、独自のヘッダーを返して、さらに通常のコンテンツへディスパッチできるので、Cookieを仕込むことが出来るようになる。"success"の場合、Cookie設定用のヘッダーがが出力され、 editconf.jsp が表示される <action name="user_update_pre" class="UserAction" method="doCheck"> <param name="preread">true</param> <result> <param name="headers['Set-Cookie']">${ 'userid=' + id }</param></result></action>

Struts2で独自のhttpヘッダーを返したい場合2

httpheaderを見てみるとこれの後にdispatcherが呼べたら幸せなのにと思った。 で、作ってみた。httpheaderとtempl(TemplateResult)を併せたresult型 ※templはstruts.xml にはOGNL式が書ける。 - Struts 2+Spring 2+Tiles+Acegi+iBatis+GWT+JUnit 4+JMockit…

httpheaderについて

httpheaderのResultを使用すると、200以外のステータスコードとカスタムヘッダーを返却することが出来る。 ただし、httpheaderでカスタムヘッダーを出力して、さらにコンテンツを出力するような使い方は出来ない。異常発生時にエラーをブラウザに返却する場…

Struts2で独自のhttpヘッダーを返したい場合

例えば、 "Cache-Control: max-age=10" のようなヘッダーを返したい場合、何処に実装するのが適当なのか?標準ではそういう機構が意外にもみつけられなかった。やれそうな場所を並べると Action中でrequestにセット:これは無い resultのhttpheader:これは…

s:checkboxlistタグについて

Struts2のカスタムタグには s:checkbox と類似の s:checkboxlist というのがある こちらは s:select と同じような使い方になる。listのソースを固定値ではなく、プログラムから設定する方法で紹介するtutorial.Media.java public class Media { String type;…

Struts2のAction専用のスキャン用Annotationを作る

context:component-scanを設定するとSpringがAnnotationをスキャンしてBean生成を行うが、Struts2用のアクションであることが明示された方が後々都合がいいかもしれないので、専用のステレオタイプAnnotationを作っておく。 こうしておけば、例えばStruts2の…

Struts2のアクションもAnnotationでbean生成する

ActionへのDependency Injectionだけを行うつもりだったが、考えるとActionは単純にBean生成だけをapplicationContext.xmlに書くことになる。単純な作業になってしまうので、Action Beanの生成もAnnotationにお願いするようにするSpringのapplicationContext…

Spring2.5の@Reourceアノテーションを使ってみる

Springの applicationContext.xml の最初の部分を2.5用に次のように変更

Springを2.0から2.5に変更する

@Resourceアノテーションを使いたいためにSpringを2.0から最新の2.5.1に、JDKを1.5.0から1.6.0に変更する。 Spring2.5は大幅なパフォーマンスアップをしているらしいのと、2.0と完全互換を謳っているのでそろそろ移行しておいて損は無いとみた。http://journ…

checkboxの扱い

WebのformでCheckboxのUIを使う場合問題になるのが、Checkboxがcheckされていない場合にパラメータ自体が投げられず、実装によってはアプリ上で保持している値がクリアされないというものがある。 hiddenなどを使ってCheckboxが投げれら無かった場合の処理を…

ScopeInterceptorでSpringのbeanをsessionに保持

ApplicationContextの取得が出来るということは、そこからSpringのbeanを取得してあげれば、Spring管理下のBeanをScopeInterceptorで保持できると考えた。ScopeInterceptorで保持することの利点は、オブジェクト毎に簡単に破棄が出来る事。Springのsessionの…

Struts2のアクションでSpringのApplicationContextの参照

Struts2のAction自体がSpringで生成されappplicaiotnContext.xmlに従い勝手に依存性の注入(Dependency Injection)をしてくれるので、Action中でSpringのApplicationContextを明示的に取得したい場面は少ないと思うが、次のようにして参照することができる…

iBatisのSQL記述の共通部分の共有

一覧ページング処理では件数の取得を先ず行ってから部分的な一覧の取得を行うことが多いが、その場合SQLの条件部分は全く同じになる。 そのようなSQLの共通部分を別に定義し、参照することで"全く同じ"を保証することが出来る。 <select id="getAllCount" resultClass="java.lang.Integer"> SELECT COUNT(*) as num FRO</select>…

iBatisから1対多のテーブルからのデータ取得2

前の方法(iBatisでの1対多のテーブルからのデータ取得 - Struts 2+Spring 2+Tiles+Acegi+iBatis+GWT+JUnit 4+JMockit でフルスタックJAVAフレームワーク)だと、1対多の多側の取得にN回のクエリ実行が必要で、全体でN+1回のクエリを実行することになって…

selectタグ3

selectタグの子要素として、 optgroup があり、これを使用すると要素のグルーピングができる。 グルーピングをする場合、selectのlistに指定する項目は無い場合が多いが、selectの list は必須となっているため指定しないわけには行かない。次のように呼び出…

selectタグ2

selectタグでは次のような便利なタグオプションが使える オプション説明例 required必須マークが表示されるrequired="true"選択肢*:のようにラベルに"*"が表示されるこれはUI要素で共通に使える emptyOption空の要素を先頭に作るか否かemptyOption="true"先…

selectタグ

Struts2での UI の select タグで、選択肢の中身がマスターで管理するような内容ではない場合、 JSP中でOGNLのCollectionを作成し list に渡してあげればいい。値とラベルが同じで良い場合は配列として次のようにする <s:set name="select_gender" value="{ '男', '女' }"/> 値とラベルを変えたい場合(男が選ばれ</s:set>…

CookieInterceptorについて

CookieInterceptorは投げられたCookieをプロパティにセットしてくれる。 しかし、特定のCookieだけを扱う場合以外はあまり扱いやすくないように思う。 例えば、全てのCookieを受け付ける "*" 指定をすると、セッショントラッキング用のJSESSIONIDというCooki…

Logの設定

Log4jを標準使用するので WEB-INF/classes/commons-logging.properties に次のように書く org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger Log4jの設定はXML形式の方が新しいけど、properties形式の方がなんとなく直感的で好き…

Token Session Store Interceptorの使い方

使い方と言っても、TokenInterceptorと殆ど変わらない。 で、何が違うのかというと、通常トランザクションTokenでTokenが違う場合エラーメッセージや他の画面を表示する事になるが、これだと誤って2重ポストをした消費者にはエラー画面が表示され、完了画面…