CodeZine(コードジン)

特集ページ一覧

Struts 2入門(3)~バリデーションの仕組みを理解する(後編)~

作りながら学ぶJavaアプリケーションフレームワーク

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/06/23 14:00
目次

今回の画面遷移

 画面遷移は、次のようになります。

画面遷移
画面遷移

 まず、トップページのリンクからResearchPart3アクションが呼ばれたら、入力ページ「research.jsp」を表示します。Researchクラスにはフォームに対応するメンバ変数がないので、各項目には何も表示しません。

 次にページの確認ボタンをクリックしてsubmitすると、ResearchConfirmPart3アクションが呼び出されます。対応するActionメソッドはResearchクラスのconfirmメソッドです。confirmメソッドの処理終了後は、JSPの表示ではなく、バリデーション用ActionであるResearchWithValidationを実行します。

 ResearchWithValidationクラスには、フォームの項目に対応するメンバ変数があります。ここには入力した値がセットされているので、バリデーション処理が行えるというわけです。

 バリデーション処理後、エラーがなければ確認ページ「confirm.jsp」が表示されます。もしエラーがある場合は、もう一度入力画面「research.jsp」が表示されるという流れです。

 以上の流れを実現するための「struts.xml」は、次のようになります。

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アクションのタグにあります。

ressultタグ
<result name="success" type="chain">ResearchWithValidation</result>

 JSPファイルの表示ではなく、別のActionに遷移するには、<result>タグのtype属性にchainをつけます。この属性を付加することによって、ResearchWithValidationという別のActionを呼び出すようにできるのです。

resultタグのtype属性に設定できる値

 type属性にはchainだけでなく、いくつかの値を指定できます。以下の表にまとめました。

type属性値一覧
type属性値概要
chain別のActionに遷移する。
dispatcherJSPファイルをレンダリングする(デフォルト値)。
freemarker汎用テンプレートエンジンFreeMarker用テンプレートをレンダリングする。
httpheaderHTTPレスポンスヘッダーだけを返す。
redirect指定のURLにリダイレクトする。
redirectActionActionにリダイレクトする
(フォームの入力値などがActionにセットされない)。
streamイメージデータなどのバイナリデータを返す。
velocityVelocity用テンプレートをレンダリングする。
xsltXML/XSLTでのレンダリングを行う。
plainTextプレーンテキストとして、そのまま表示する。

 各値には、さらにパラメータを指定できます。詳細は、Struts 2 のドキュメント Result Typesを参照してください。

index.jspの修正

 「index.jsp」には、今回のActionクラスを実行するためのタグを追加しておきます。

index.jspの追加分
<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テーマのバリデーションエラー・メッセージ
 テーマをsimpleにした場合は、バリデーションエラーのメッセージは自動では表示されませんので、JSPファイルに<s:fielderror>タグを記述する必要があります。単に<s:fielderror />と記述すると、すべてのメッセージがリスト表示されます。個別にメッセージを取得したい場合は、


<s:fielderror><s:param value="%{'userName'}" /></s:fielderror>
 

という具合に、paramタグで個別にメッセージを指定します。

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:作りながら学ぶJavaアプリケーションフレームワーク

もっと読む

著者プロフィール

  • WINGSプロジェクト 高江 賢(タカエ ケン)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5