Struts-2-struts-validations

提供:Dev Guides
移動先:案内検索

Struts 2-検証フレームワーク

この章では、Struts検証フレームワークをさらに詳しく見ていきます。 Strutsコアには、アプリケーションがルールを実行してアクションメソッドが実行される前に検証を実行するのを支援する検証フレームワークがあります。

クライアント側の検証は通常、Javascriptを使用して実現されます。 ただし、クライアント側の検証のみに依存するべきではありません。 ベストプラクティスでは、アプリケーションフレームワークのすべてのレベルで検証を導入することを推奨しています。 ここで、Strutsプロジェクトに検証を追加する2つの方法を見てみましょう。

ここでは、単純なページを使用して名前と年齢をキャプチャする Employee の例を取り上げ、これら2つの検証を行って、ユーザーが常に名前と年齢を入力することを確認します。 28と65。

例のメインJSPページから始めましょう。

メインページを作成

メインページJSPファイル index.jsp を作成します。これは、上記の従業員関連情報を収集するために使用されます。

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
   pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <title>Employee Form</title>
   </head>

   <body>
      <s:form action = "empinfo" method = "post">
         <s:textfield name = "name" label = "Name" size = "20"/>
         <s:textfield name = "age" label = "Age" size = "20"/>
         <s:submit name = "submit" label = "Submit" align="center"/>
      </s:form>
   </body>
</html>

index.jspはStrutsタグを使用しますが、これについてはまだ説明していませんが、タグ関連の章で学習します。 ただし、現時点では、s:textfieldタグが入力フィールドを出力し、s:submitが送信ボタンを出力すると仮定します。 各タグのラベルプロパティを使用して、各タグのラベルを作成しました。

ビューを作成する

定義されたアクションがSUCCESSを返す場合に呼び出されるJSPファイルsuccess.jspを使用します。

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
   pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <title>Success</title>
   </head>

   <body>
      Employee Information is captured successfully.
   </body>
</html>

アクションを作成

そこで、小さなアクションクラス Employee を定義し、次に Employee.java ファイルに示すように* validate()というメソッドを追加しましょう。 アクションクラスが *ActionSupport クラスを拡張していることを確認してください。そうしないと、validateメソッドが実行されません。

package com.finddevguides.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class Employee extends ActionSupport {
   private String name;
   private int age;

   public String execute() {
       return SUCCESS;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public void validate() {
      if (name == null || name.trim().equals("")) {
         addFieldError("name","The name is required");
      }

      if (age < 28 || age > 65) {
         addFieldError("age","Age must be in between 28 and 65");
      }
   }
}

上記の例に示すように、検証メソッドは「名前」フィールドに値があるかどうかをチェックします。 値が指定されていない場合は、カスタムエラーメッセージとともに「名前」フィールドにフィールドエラーを追加します。 次に、「Age」フィールドに入力された値が28〜65であるかどうかを確認します。この条件が満たされない場合は、検証済みフィールドの上にエラーを追加します。

構成ファイル

最後に、次のように 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>
   <constant name = "struts.devMode" value = "true"/>
   <package name = "helloworld" extends = "struts-default">

      <action name = "empinfo"
         class = "com.finddevguides.struts2.Employee"
         method = "execute">
         <result name = "input">/index.jsp</result>
         <result name = "success">/success.jsp</result>
      </action>

   </package>
</struts>

以下は web.xml ファイルの内容です-

<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns = "http://java.sun.com/xml/ns/javaee"
   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id = "WebApp_ID" version = "3.0">

   <display-name>Struts 2</display-name>

   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>

   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher
      </filter-class>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
</web-app>

次に、プロジェクト名を右クリックし、[エクスポート]> [WARファイル] をクリックして、WARファイルを作成します。 次に、このWARをTomcatのwebappsディレクトリにデプロイします。 最後に、Tomcatサーバーを起動して、URL *http://localhost:8080/HelloWorldStruts2/index.jsp にアクセスしてみます。 これにより、次の画面が生成されます-

ユーザー入力のメール送信

必要な情報を入力せずに、[送信]ボタンをクリックしてください。 次の結果が表示されます-

エラー

必要な情報を入力しますが、間違った差出人フィールドを入力し、名前を「test」、年齢を30と言い、最後に Submit ボタンをクリックします。 次の結果が表示されます-

成功

この検証の仕組み

ユーザーが送信ボタンを押すと、Struts 2は自動的にvalidateメソッドを実行し、メソッド内にリストされている "if" ステートメントのいずれかがtrueの場合、Struts 2はaddFieldErrorメソッドを呼び出します。 エラーが追加された場合、Struts 2はexecuteメソッドの呼び出しに進みません。 むしろ、Struts 2フレームワークは、アクションを呼び出した結果として input を返します。

したがって、検証が失敗し、Struts 2が input を返すと、Struts 2フレームワークはindex.jspファイルを再表示します。 Struts 2のフォームタグを使用したため、Struts 2はファイルされたフォームのすぐ上にエラーメッセージを自動的に追加します。

これらのエラーメッセージは、addFieldErrorメソッド呼び出しで指定したものです。 addFieldErrorメソッドは2つの引数を取ります。 最初はエラーが適用される form フィールド名で、2番目はそのフォームフィールドの上に表示されるエラーメッセージです。

addFieldError("name","The name is required");
*input* の戻り値を処理するには、次の結果を *struts.xml* のアクションノードに追加する必要があります。
<result name = "input">/index.jsp</result>

XMLベースの検証

検証を行う2番目の方法は、アクションクラスの横にxmlファイルを配置することです。 Struts2 XMLベースの検証は、電子メール検証、整数範囲検証、フォーム検証フィールド、式検証、正規表現検証、必須検証、必須文字列検証、文字列長検証などの検証オプションを提供します。

xmlファイルには '[action-class]'-validation.xml という名前を付ける必要があります。 したがって、私たちの場合、次の内容を持つ Employee-validation.xml というファイルを作成します-

<!DOCTYPE validators PUBLIC
   "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
   "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
   <field name = "name">
      <field-validator type = "required">
         <message>
            The name is required.
         </message>
      </field-validator>
   </field>

   <field name = "age">
     <field-validator type = "int">
         <param name = "min">29</param>
         <param name = "max">64</param>
         <message>
            Age must be in between 28 and 65
         </message>
      </field-validator>
   </field>
</validators>

上記のXMLファイルは、理想的にはクラスファイルとともにCLASSPATHに保存されます。 * validate()*メソッドを使用せずに、次のようにEmployeeアクションクラスを作成します。

package com.finddevguides.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class Employee extends ActionSupport{
   private String name;
   private int age;

   public String execute() {
       return SUCCESS;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }
}

セットアップの残りの部分は前の例のままです。アプリケーションを実行すると、前の例で受け取ったものと同じ結果が生成されます。

構成を保存するためのxmlファイルを持つことの利点は、アプリケーションコードから検証を分離することを可能にします。 開発者にコードを記述させ、ビジネスアナリストに検証xmlファイルを作成させることができます。 もう1つ注意すべきことは、デフォルトで使用可能なバリデータータイプです。

Strutsにはデフォルトで付属するバリデーターがたくさんあります。 一般的なバリデータには、日付バリデータ、正規表現バリデータ、文字列長バリデータが含まれます。 詳細については、次のリンクを確認してください:/struts_2/xml_based_validators [Struts-XML Based Validators]。