OGNL

OGNLでNestしたMapへのアクセス

Struts2のOGNLでのNestしたMapへのアクセスで少し躓いた。 <s:set name="nestmap" value="#{ 'a' : #{ 'A' : 'aa', 'B' : 'bb' }, 'b' : #{ 'A' : 'cc', 'B' : 'dd' } }"/>このようなNestしたMapがあったとして、これにアクセスする場合次のどれでもアクセスできる <s:property value="#nestmap.a.A"/> <s:property value="#nestmap['a'].A"/> </s:property></s:property></s:set>

OGNLでコレクションの抽出

Struts2のJSPカスタムタグ中などで利用できるOGNL式はコレクションに対して便利な操作が簡単に行える。コレクションからの条件抽出も次のようにして実現できる。 コレクション.{? 条件 }これで条件に一致する要素のみで構成されたコレクションとなる。次のよ…

OGNLのin句

Struts2の各種ファイルで利用できるOGNL式で、in句を使うとコレクション中での要素の存在を簡単に調べることができるJSPの場合次のようなリストがあったとして <s:set name="list1" value="{ 'item1', 'item20', 'item300', 'item4000' }"/> この結果は item2:[<s:property value="'item2' in #list1"/>]<br> item20:[<s:property value="'item20' in #list1"/>]<br> item200:[</s:property></s:property></s:set>

OGNLコレクションの射影

Struts2のOGNLでコレクションの射影を容易に作成できる コレクション.{ 操作 }で新しいコレクションが返される。{ }内では #thisで現在要素を参照できる。例えば文字列のリストがあったとして、各要素の後に " ({文字列長})"のような文字列を付加したリスト…

OGNLのlist

OGNLでリストを生成する場合、リストの最後の要素に余分な ","が付いているとリストになってくれない。次のように書くのは'label2'の後の "," が余分だからNGで <s:set name="listitem" value="#{ '1':'label1', '2':'label2', }" /> <s:set name="listitem" value="{ 'label1', 'label2', }" /> 次のように書けばOKだった <s:set name="listitem" value="#{ '1':'label1', '2':'label2' }" /> </s:set></s:set></s:set>

独自ヘッダーを返す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>

httpheaderについて

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

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>…

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は全て…

JSPでのValueStackの参照

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

Localeによるdispatch先の選択2

この記事のコードには問題があります。正しくは Localeによるリソース選択Interceptorの問題解消 - Struts 2+Spring 2+Tiles+Acegi+iBatis+GWT+JUnit 4+JMockit でフルスタックJAVAフレームワークを参照してください。 Localeの設定によって選択可能にはなっ…

struts.xml にはOGNL式が書ける。

例えばLocaleの設定によってResultで表示するファイル変えたりする事ができる。 <result>${ "/"+locale.getLanguage() +"/list.jsp" }</result> しかし、全部のresultをこんな風に書くと見た目が汚いので、テンプレートの置き換えが可能な新しいresultを作ったTemlateResult.j…