今回の画面遷移
画面遷移は、次のようになります。
まず、トップページのリンクからResearchPart3
アクションが呼ばれたら、入力ページ「research.jsp」を表示します。Research
クラスにはフォームに対応するメンバ変数がないので、各項目には何も表示しません。
次にページの確認ボタンをクリックしてsubmitすると、ResearchConfirmPart3
アクションが呼び出されます。対応するActionメソッドはResearch
クラスのconfirm
メソッドです。confirm
メソッドの処理終了後は、JSPの表示ではなく、バリデーション用ActionであるResearchWithValidation
を実行します。
ResearchWithValidation
クラスには、フォームの項目に対応するメンバ変数があります。ここには入力した値がセットされているので、バリデーション処理が行えるというわけです。
バリデーション処理後、エラーがなければ確認ページ「confirm.jsp」が表示されます。もしエラーがある場合は、もう一度入力画面「research.jsp」が表示されるという流れです。
以上の流れを実現するための「struts.xml」は、次のようになります。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="HelloProject" extends="struts-default"> <action name="ResearchPart3" class="part3.Research"> <result name="success">/part3/research.jsp</result> </action> <action name="ResearchConfirmPart3" method="confirm" class="part3.Research"> <result name="success" type="chain">ResearchWithValidation</result> </action> <action name="ResearchWithValidation" class="part3.ResearchWithValidation"> <result name="success">/part3/confirm.jsp</result> <result name="input">/part3/research.jsp</result> </action> </package> </struts>
Actionメソッドから、別のActionメソッドを呼び出すための定義は、ResearchConfirmPart3
アクションのタグにあります。
<result name="success" type="chain">ResearchWithValidation</result>
JSPファイルの表示ではなく、別のActionに遷移するには、<result>
タグのtype
属性にchain
をつけます。この属性を付加することによって、ResearchWithValidation
という別のActionを呼び出すようにできるのです。
resultタグのtype属性に設定できる値
type
属性にはchain
だけでなく、いくつかの値を指定できます。以下の表にまとめました。
type属性値 | 概要 |
chain | 別のActionに遷移する。 |
dispatcher | JSPファイルをレンダリングする(デフォルト値)。 |
freemarker | 汎用テンプレートエンジンFreeMarker用テンプレートをレンダリングする。 |
httpheader | HTTPレスポンスヘッダーだけを返す。 |
redirect | 指定のURLにリダイレクトする。 |
redirectAction | Actionにリダイレクトする (フォームの入力値などがActionにセットされない)。 |
stream | イメージデータなどのバイナリデータを返す。 |
velocity | Velocity用テンプレートをレンダリングする。 |
xslt | XML/XSLTでのレンダリングを行う。 |
plainText | プレーンテキストとして、そのまま表示する。 |
各値には、さらにパラメータを指定できます。詳細は、Struts 2 のドキュメント Result Typesを参照してください。
index.jspの修正
「index.jsp」には、今回のAction
クラスを実行するためのタグを追加しておきます。
<a href="ResearchPart3.action"> アンケート 2</a><br />
必要なファイルの配置
必要なファイルをサーバ上に配置すると次のような構成になります。「confirm.jsp」は、前回とまったく変更ありませんので、同じものをコピーしてください。
<ContextRoot> ├ /WEB-INF │ ├ /classes │ │ ├ /part3 │ │ │ ├ Research.class │ │ │ └ ResearchWithValidation.class │ │ └ struts.xml │ ├ /lib │ └ web.xml ├ /part3 │ ├ research.jsp │ └ confirm.jsp └ index.jsp
simple
にした場合は、バリデーションエラーのメッセージは自動では表示されませんので、JSPファイルに<s:fielderror>
タグを記述する必要があります。単に<s:fielderror />
と記述すると、すべてのメッセージがリスト表示されます。個別にメッセージを取得したい場合は、<s:fielderror><s:param value="%{'userName'}" /></s:fielderror>
という具合に、
param
タグで個別にメッセージを指定します。