Struts2教學
Struts2快速入門
Struts2 MVC架構
Struts2 是什麼?
Struts2 環境配置
Struts2 體系結構
Struts2 Hello World 實例
Struts2 配置文件
Struts2 Action/動作
Struts2 攔截器
Struts2 結果和結果類型
Struts2 值棧/OGNL
Struts2 文件上傳
Struts2 MySQL數據庫訪問
Struts2 發送郵件Email
Struts2 驗證框架
Struts2 基於XML校驗
Struts2 本地化/國際化(i18n)
Struts2 類型轉換
Struts2 主題和模板
Struts2 異常處理
Struts2 註釋
Struts2 註釋類型
Struts2 控件標籤
Struts2 iterator標籤
Struts2 if/else標籤
Struts2 merge標籤
Struts2 append標籤
Struts2 generator標籤
Struts2 數據標籤
Struts2 action標籤
Struts2 include標籤
Struts2 bean 標籤
Struts2 date 標籤
Struts2 param 標籤
Struts2 property 標籤
Struts2 set 標籤
Struts2 text 標籤
Struts2 url標籤
Struts2 表單標籤
Struts2 Ajax 標籤
Struts2和Spring集成
Struts2和Tiles集成
Struts2和Hibernate集成
Struts 2 hello world (XML版本)
Struts2註解示例
Struts2 @ResultPath註釋示例
Struts2 include(包含)多個配置文件
Struts2命名空間配置和解釋
Struts2開發者模式
如何刪除Struts2動作的後綴擴展名
使用Struts2動作
Struts2的ActionError&ActionMessage示例
Struts2模型驅動實例
Struts2映射攔截動作
Struts2重寫攔截器參數
Struts2攔截器棧的例子
Struts2 execAndWait攔截器例子
Struts2 <s:textfield>文本示例
Struts2 <s:password>密碼示例
Struts2 <s:hidden>隱藏值例子
Struts2 <s:textarea>文本域實例
Struts2 <s:radio>單選按鈕例子
Struts2單選預選按鈕值
Struts2 <s:checkbox>複選框例子
Struts2設置多個複選框缺省值
Struts2 <s:checkboxlist>多個複選框例子
Struts2 <s:select>下拉框例子
Struts2自動選擇下拉框的值
Struts2 <s:combobox>組合框的例子
Struts2 <s:head>示例
Struts2文件上傳例子
Struts2上傳多個文件例子
Struts2 <s:doubleselect>示例
Struts2 <s:updownselect>示例
Struts2 <s:optiontransferselect>示例
Struts2 <sx:datetimepicker>示例
Struts2 <sx:autocompleter>自動提示例子
Struts2 autocompleter+JSON例子
Struts2 <s:iterator>迭代器標籤示例
Struts2 if,elseif,else標籤示例
struts2 <s:append>標籤示例
Struts2 <s:generator>標籤示例
Struts2 <s:merge>標籤示例
Struts2 <s:sort>標籤示例
Struts2 <s:subset>標籤示例
Struts2 <s:a>標籤示例
Struts2 <s:action>標籤示例
Struts2 <s:bean>標籤示例
Struts2 <s:date>標籤示例
Struts2 <s:debug>標籤示例
Struts2 <s:include>標籤示例
Struts2 <s:i18n>標籤示例
Struts2 <s:param>標籤示例
Struts2 <s:property>標籤實例
Struts2 <s:push>標籤示例
Struts2 <s:set>標籤示例
Struts2 <s:texttag>標籤示例
Struts2 <s:url>標籤示例
Struts2資源包使用示例
Struts2本地化和國際化
Struts2 key鍵屬性示例
Struts2中文本地化問題
如何配置Struts2全局資源包
Struts2+Spring集成實例
Struts2+Quartz2調度集成實例
Struts2+Hibernate使用Full Hibernate Plugin集成
Struts2+Hibernate集成實例
Struts2+Spring+Hibernate集成實例
Struts2+Log4j集成
Struts2的FilterDispatcher和StrutsPrepareAndExecuteFilter有什麼不同?
Struts2獲取HttpServletRequest實例
Struts2獲取HttpServletResponse實例
如何獲取ServletContext對象
Struts2配置Action類的靜態參數
Struts2下載文件實例
Struts2和JSON實例

Struts2 驗證框架

現在,我們將看看如何的Struts驗證框架。在Struts的核心有驗證框架,協助應用程序的運行規則來執行驗證執行之前的操作方法。

通常是使用Javascript來實現客戶端驗證。但不應單獨依賴於客戶端驗證。最佳實踐表明,驗證應引入各級應用程序框架。現在,讓我們來看看兩種方式添加驗證我們的Struts項目。

在這裏,我們將採取一個例子,Employee 將被捕獲的姓名和年齡使用一個簡單的頁面,我們將會把兩個驗證,以確保使用總是進入一個名字和年齡應該是在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"%> Employee Form <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" />

在index.jsp使用Struts的標籤,我們還沒有涉及,但我們將研究這些標籤相關的章節。但現在,假設 s:textfield 標籤打印一個輸入字段s:submit打印一個提交按鈕。我們已經使用label屬性標籤,每個標籤每個標籤創建。 

創建視圖:

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

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> Success Employee Information is captured successfully.

創建動作:

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

package com.yiibai.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」字段的驗證方法檢查是否有一個值,或不。如果沒有值已經提供,我們添加一個帶有自定義錯誤消息「Age」字段的字段錯誤。其次,我們檢查,如果輸入的值是在28和65之間或不爲「Age」字段,如果這個條件不符合我們以上驗證字段添加一個錯誤。

配置文件:

最後,讓我們把所有東西一起使用struts.xml的配置文件如下:

<constant name="struts.devMode" value="true" /> <package name="helloworld" extends="struts-default"> <action name="empinfo" class="com.yiibai.struts2.Employee" method="execute"> <result name="input">/index.jsp <result name="success">/success.jsp

以下是web.xml文件中的內容:

<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"> Struts 2 index.jsp struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /*

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

Email

現在不輸入任何所需信息,只需點擊「Submit 」按鈕。將看到以下結果:

Error

輸入所需的信息,但輸入了錯誤的From字段,讓我們說「test」和年齡爲30,最後點擊「Submit 」按鈕。將看到以下結果:

Success

此驗證是如何工作的?

當用戶按下提交按鈕時,Struts2會自動執行的驗證方法,如果任何一個if語句裏面的方法列出,Struts 2調用addFieldError方法。如果有任何錯誤已加入Struts 2將不會進行調用execute方法。而Struts 2框架將返回輸入作爲調用該行動的結果。

因此,驗證失敗時Struts2返回輸入,Struts 2框架將重新顯示index.jsp文件。因爲我們使用了Struts 2的表單標籤,Struts2中會自動添加錯誤消息,只是上面的形式提交。

這些錯誤消息是我們addFieldError方法調用中指定的。addFieldError方法有兩個參數。首先是表單字段名錯誤,第二個是錯誤信息,上面顯示該表單字段。

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

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

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

基於XML的驗證:

在進行驗證的第二個方法是通過將一個xml文件的動作類。Struts2的基於XML驗證的驗證提供了更多的選擇,如電子郵件驗證,整數範圍驗證,表單驗證字段,表達式驗證,正則表達式驗證,需要驗證,驗證所需的字符串,字符串長度的驗證等。

XML文件需要被命名爲'[action-class]'-validation.xml。所以,在我們的例子中,我們創建一個文件,名爲 Employee-validation.xml包含以下內容:

<field name="name"> <field-validator type="required"> The name is required. <field name="age"> <field-validator type="int"> <param name="min">29 <param name="max">64 Age must be in between 28 and 65

上面的XML文件會被保存在CLASSPATH 沿着類文件。讓我們有我們的僱員動作類沒有validate()方法如下:

package com.yiibai.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的校驗.