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

@Overrideアノテーション

Java5 では interface のメソッドの実装に @Override を付けるとエラーとなってしまうが、 Java6 ではエラーにならなくなった。Struts2の仕組みのような場合 @Override を付けるのは必須だと思う。例えば、あるアクションで public class Foo implements Ses…

s:subsetの使い方

Struts2のTagの s:subset はリストの一部分を取り出す時に利用する。 s:incldueと組み合わせて利用すると条件によって2段組または1段組にしたい場合などで便利に使える。リスト要素を単純に出力するとして、 s:include で取り込まれる側には純粋な1段分の…

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>

s:includeのバグ

Struts2のs:includeは便利に使えるのだが、バグがあった。8192バイトの境界に複数バイトのUTF-8文字跨ったものをincludeするとその文字が化けてしまうという問題。 これは s:incldueの内部で使用している FastByteArrayOutputStream というのがUTF-8複数バイ…

s:setのscope

Struts2のs:actionで呼んだ先に名前つきでパラメータを渡す方法として <s:set name="" value="#request.namedParam='test'"/> のような方法を挙げたが、s:setにはスコープ指定があるのに気が付きました。 <s:set name="namedParam" value="'test'" scope="request"/> と書いたほうがスッキリします。参照の仕方はどちらも <s:property value="%{ #request.namedParam }"/> でOK。</s:property></s:set></s:set>