Struts2-検証フレームワーク

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

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

ここでは、例を取り上げます Employee その名前と年齢は単純なページを使用して取得する必要があります。ユーザーが常に28〜65の範囲の名前と年齢を入力するように、これら2つの検証を行います。

例のメイン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が送信ボタンを出力すると仮定します。各タグのラベルを作成する各タグのlabelプロパティを使用しました。

ビューを作成する

定義されたアクションが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、次にというメソッドを追加します validate() 以下に示すように Employee.javaファイル。アクションクラスが拡張することを確認してくださいActionSupport それ以外の場合、validateメソッドは実行されません。

package com.tutorialspoint.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");
      }
   }
}

上記の例に示されているように、検証メソッドは「名前」フィールドに値があるかどうかをチェックします。値が指定されていない場合は、カスタムエラーメッセージとともに「名前」フィールドのフィールドエラーを追加します。次に、「年齢」フィールドに入力された値が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.tutorialspoint.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>

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

必要な情報を入力せずに、をクリックするだけです。 Submitボタン。次の結果が表示されます-

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

この検証はどのように機能しますか?

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

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

これらのエラーメッセージは、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() 方法−

package com.tutorialspoint.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-XMLベースのバリデーターの詳細については、次のリンクを確認してください。