SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

今回の画面遷移

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

画面遷移
画面遷移

 まず、トップページのリンクから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タグで個別にメッセージを指定します。

次のページ
メッセージのローカライズ方法

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
作りながら学ぶJavaアプリケーションフレームワーク連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2572 2008/08/14 18:32

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング