Struts 2の場合 2
不具合エントリを作成/変更するためのデータフォーム
<s:form action="action!save" method="post" >
<s:hidden name="defect.id" value="%{defect.id}" />
<s:textfield label="%{getText('defect.description')}"
name="defect.description" value="%{defect.description}"
size="100" maxlength="200" required="true" />
<s:select label="%{getText('defect.priority')}"
name="defect.priority" value="%{defect.priority}"
list="#{'1':'1','2':'2','3':'3','4':'4'}" />
<br/>
<s:if test="defect.id > 0">
<s:textfield label="%{getText('defect.resolution')}"
name="defect.resolution" value="%{defect.resolution}"
size="100" maxlength="200" />
</s:if>
<br/>
<s:submit value="%{getText('defect.editrecord')} " />
<s:submit value="%{getText('defect.cancel')}" action="list" />
</s:form>
Struts 2では、式をサポートするためにOGNLライブラリを利用しています。これによって、ラベルとモデルデータを一緒に効率的に表示できます。Struts 2の<if>タグを使用すると、既存のIDが見つかったかどうかに応じて、resolutionフィールドの表示を切り替えることができます。フォームのaction属性には「action!save」が設定されていますが、これは、送信時にsaveメソッドが呼び出されることを表します。
最後に、Struts 2における検証について簡単に説明します。Struts 2では、WebWorkで提供される検証フレームワークが使用されています。似たような宣言的な検証用のメソッドも提供されていますが、WebWorkの方がきめ細かな対応が可能です。検証には、モデル単位の検証と、アクション単位の検証の2種類があります。アクションレベルで検証するには、「{your action}-validation.xml」という名前のファイルを作成し、それをActionクラスと同じパッケージに配置します。
モデルレベルで検証するには、モデルオブジェクトの名前を持つ同様のファイルを作成します。一般的な方法では、「Defect-validation.xml」ファイルで行ったのと同様にモデルレベルの検証を行い、次に、Actionの検証ファイルで、モデルの検証ファイル内のルールごとに検証を指示します。
Defect-validation
<validators> <field name="defect.description"> <field-validator type="requiredstring"> <message key="errors.required"/> </field-validator> </field> </validators>
Actionの検証(「type="visitor"」属性を指定することでモデルに検証を委任)
<validators> <field name="defect"> <field-validator type="visitor"> <param name="appendPrefix">false</param> <message/> </field-validator> </field> </validators>
Struts 2では、既定で検証が有効です。validateメソッドを呼び出すことはありません。Struts 2では、inputを返すActionについては検証の呼び出しが行われないため、検証が不要な場合にこれを抑制するコードを作成しなくて済みます。Struts 2には、検証エラーメッセージを表示するための類似のタグセットがあります。
まとめ
Struts 2には理解すべき点が多いことは否定できません。多くの変更が加えられてはいますが、このフレームワークは全体にわたって明らかにStruts 1の影響を受けています。そのうえ、Struts 2には多くの新しい機能が追加されているので、Struts 2はStruts 1の優れた後継者と言えるでしょう。
本稿では、Struts 1とStruts 2を比較し、その概要を説明しました。本稿で使用したソースファイルは、本稿の冒頭のリンクからダウンロードできます。Struts 2のWebサイトには、本稿では扱っていない詳細情報が記載されており、アクセスしてみることを強くお勧めします。また、そのWebサイトに用意されているチュートリアルとドキュメントを参照して、フレームワークについて理解を深めてください。
