第4章 Struts 2のバリデーションの実装
この章では、Struts 2のバリデーションの実装を説明します
homepage
# **Struts 2のバリデーションの実装** *** **本章の目標**は<br> バリデーションを追加して、下記の四つ条件をチェックします。 <table border="1" > <tr style="width:100px ;background-color:#C6E0B4 ;text-align:center;"> <td>画面入力項目</td><td>チェック条件</td><td>エラーメッセージ</td> </tr> <tr> <td rowspan="2">ユーザID</td><td>必須入力のこと</td><td>ユーザID(メールアドレス)を入力してください!</td> </tr> <tr> <td>有効なメールアドレスが入力すること</td><td>有効なメールアドレスを入力してください!</td> </tr> <tr> <td rowspan="2">パスワード</td><td>必須入力のこと</td><td>パスワードを入力してください!</td> </tr> <tr> <td>6桁のパスワードが入力すること</td><td>パスワード欄に6桁半角英数字を入力してください!</td> </tr> </table> <br> **画面イメージ:** <!--graph4-1.png--> <a href="https://i.loli.net/2019/06/27/5d148513c0c1e37804.jpg" target="_blank"> <img src="https://i.loli.net/2019/06/27/5d148513c0c1e37804.jpg" width=40%></a> <br><br> ## **1.基本のバリデーションとは** 入力フォームのページに欠かせないのは、入力値が期待する値になっているかどうかを検証する処理です。このような入力値の検証のことを一般に「バリデーション」と呼んでいます。この章では、前章の基本アプリケーションにバリデーション機能を追加していくことにします。 - **バリデータ一覧**<br> <!--graph4-2.png--> <a href="https://i.loli.net/2019/06/27/5d1419fc5969c62652.jpg" target="_blank"> <img src="https://i.loli.net/2019/06/27/5d1419fc5969c62652.jpg" width=40%></a> <br><br> ## **2.バリデーション処理を追加** Struts 2で、バリデーションを行うには、大きくわけて2つの方法があります。 1つはStruts2が提供するバリデーション機能を利用する方法、 もう1つは、自分でバリデーションのロジックを実装する方法です。 今日は二つ目をやります。 <br> **(1)actionの中にLoginAction-validation.xmlを追加** XMLファイルは、バリデーションを行いたいActionクラスと同じディレクトリ階層に「Actionクラス名-validation.xml」、または「Actionクラス名-Action名-validation.xml」という名前で配置します。 今回は、LoginActionクラスに追加しますので、LoginAction-validation.xmlというファイル名で作成します。 <br>  <br> **(2)バリデーションの内容は、以下のようになります** バリデーションは、LoginAction実行の前に、Struts2により行われています。 バリデーション定義した中でいずれかにエラーがあった場合は、LoginActionは実行されません。 その代わり、Struts2により、LoginActionの戻り値として、"input"という値が設定されることになっています。 "input"は、入力エラーがあることを示す固定の返値です。 **・LoginAction-validation.xml** ``` <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <validators> <!-- 1. ユーザIDの必須入力チェック --> <field name="accountId"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>ユーザIDを入力してください!</message> </field-validator> </field> <!-- 2. パスワードの必須入力チェック --> <field name="password"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>パスワードを入力してください!</message> </field-validator> </field> <!-- 3. パスワードの6桁チェック --> <field name="password"> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">6</param> <message>パスワード欄に6桁半角英数字を入力してください! </message> </field-validator> </field> <!-- 4. ユーザID欄にメールアドレス入力否判断 --> <field name="accountId"> <field-validator type="email"> <message>有効なメールアドレスを入力してください! </message> </field-validator> </field> </validators> ``` <br><br> ## **3.LoginAction.java、login.jspとstruts.xmlにコードを追加します** いくつかのバリデーションは、JavaScriptを用いたクライアントサイドでの実行とすることもできます。その設定方法は、すごく簡単で、JSPファイルの **<s:form>** タグに `validate="true"`という属性を追加するだけです。それだけで必要なJavaScriptをStruts 2が自動で生成してくれます。 <br> **(1)LoginAction.javaにコードを追加します** <!--graph4-4.png--> <a href="https://i.loli.net/2019/11/09/UXJo6RbFhDWzipQ.png" target="_blank"> <img src="https://i.loli.net/2019/11/09/UXJo6RbFhDWzipQ.png" width=40%></a> <br> **(2)login.jspにコードを追加します** ``` <div style="color:red"> <s:property value="errorMessage"/> <s:actionmessage/><s:fielderror/> </div> ``` <!--graph4-5.png--> <a href="https://i.loli.net/2019/06/27/5d1485e35e1fe92379.png" target="_blank"> <img src="https://i.loli.net/2019/06/27/5d1485e35e1fe92379.png" width=40%></a> <br> **(3)struts.xmlにコードを追加します** ``` <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <constant name="struts.devMode" value="true" /> ``` <!--graph4-6.png--> <a href="https://i.loli.net/2019/06/27/5d1466d67127621125.png" target="_blank"> <img src="https://i.loli.net/2019/06/27/5d1466d67127621125.png" width=40%></a> <br><br> ## **4.結果の確認** 四つの結果ひとつずつやってみます。 <!--graph4-7.png--> <a href="https://i.loli.net/2019/06/27/5d148662e80c115087.jpg" target="_blank"> <img src="https://i.loli.net/2019/06/27/5d148662e80c115087.jpg" width=40%></a> <br> <!--graph4-8.png--> <a href="https://i.loli.net/2019/06/27/5d1486630079263252.jpg" target="_blank"> <img src="https://i.loli.net/2019/06/27/5d1486630079263252.jpg" width=40%></a>
content
戻る