當前位置:首頁 » struts2教學 » Struts2驗證框架

Struts2驗證框架

Struts2驗證框架實例代碼和教學。

現在,我們將研究如何Struts的驗證框架。在Struts的核心,我們的驗證框架,用於幫助應用運行規則的操作方法執行之前執行驗證。
客戶端驗證通常是使用JavaScript來實現。但是人們不應該依賴客戶端的驗證孤單。最佳實踐表明,在所有的應用程序框架,應該引入驗證。現在讓我們來看看兩種方式添加驗證我們的Struts項目。
在這裡,我們將采取一個例子,雇員的姓名和年齡將被捕獲使用一個簡單的頁麵,我們把兩個驗證,以確保總是進入一個姓名和年齡應在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打印一個提交按鈕。我們使用的標簽屬性標簽,每個標簽每個標簽創建。

創建視圖:

我們將使用JSP文件的success.jsp將被調用的情況下定義的動作,返回SUCCESS。

<%@ 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>

創建動作-Action:

因此,讓我們定義一個小小的動作,Employee類,然後添加一個方法,稱為validate(),如下所示Employee.java文件。請確保您的操作類擴展了ActionSupport類,否則您的驗證方法將不被執行。

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");
      }
   }
}

正如在上麵的例子中,所示的驗證方法檢查是否'Name'字段具有一個值,或不是。如果未指定值,“Name”字段中添加一個字段錯誤自定義錯誤消息。其次,我們檢查的“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.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>

現在,右鍵點擊項目名稱,並單擊“導出”> WAR文件創建一個WAR文件。然後,這WAR部署在Tomcat的webapps目錄下。最後,啟動Tomcat服務器,並嘗試訪問URL http://localhost:8080/HelloWorldStruts2/index.jsp。這會給你以下畫麵:

現在不輸入任何所需的信息,隻需點擊submit按鈕。你會看到下麵的結果:

輸入所需的信息,但From字段輸入了錯誤,讓我們測試名字為 "test" 而年齡為:30, 最後點擊“提交”按鈕。你會看到下麵的結果:

此驗證是如何工作的?

當用戶按下“提交”按鈕,在Struts 2會自動執行的驗證方法,如果任何一個if語句內列出的方法是true,Struts 2中調用它的addFieldError方法。如果有任何錯誤已加入Struts 2中不會進行調用execute方法。而Struts 2框架將返回輸入調用動作的結果。
因此,在驗證失敗時和Struts2返回輸入,Struts 2框架將重新顯示的index.jsp文件。由於我們使用了Struts 2的表單標簽,Struts 2中會自動添加錯誤消息,隻是上麵的形式提交。
這些錯誤消息是我們addFieldError方法調用中指定的。 addFieldError方法有兩個參數。首先是表單字段名的錯誤,第二個是該表單字段上麵顯示的錯誤消息。

addFieldError("name","The name is required");

要處理輸入的返回值,我們需要添加下麵的結果對我們的動作節點在struts.xml中。

<result name="input">/index.jsp</result>

基於XML的驗證:

做驗證的第二個方法是通過將一個xml文件下的動作類。基於Struts2的XML驗證的驗證提供了更多的選擇,如電子郵件驗證,驗證整數範圍,形式驗證領域,則表達式驗證,正則表達式驗證,必要的驗證,requiredstring驗證,stringlength驗證等。

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的理想與類文件一起。我們有我們的員工action類中冇有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文件。另一個要注意的是默認情況下可用的驗證類型。有大量的驗證程序默認情況下使用Struts。常見的驗證器包括日期驗證,正則表達式驗證器和字符串長度的驗證。更詳細的請查看下麵的鏈接:Struts - 基於XML驗證器