1. 程式人生 > >struts2之宣告式驗證後續及自定義驗證器

struts2之宣告式驗證後續及自定義驗證器

在宣告式驗證中,只學會如何配置內建驗證器是不行的,因為驗證的配置中有很多技巧,那麼這篇文章中會分析以下三個問題:

一. 若 Action 類對應多個 action 請求, 且 action 請求使用不同的驗證規則

(1)為每一個不同的 action 請求定義其對應的驗證檔案: ActionClassName-actionName-validation.xml

(2) 不帶別名的配置檔案: ActionClassName-validation.xml 中的驗證規則依然會發生作用. 可以把各個action 
公有的驗證規則配置在其中. 但需要注意的是, 只適用於某一個 action 的請求的驗證規則就不要這裡再配置了.

直接上例子:

假設要求:我們在註冊的時候年齡範圍必須在20-30之間,但是在成為使用者而需要修改的時候則要求在30-50之間(只是個例子,大家看方法就行了)

(1)首先需要一個Action類,只需一個年齡屬性,即age

import com.opensymphony.xwork2.ActionSupport;

public class VariousAction extends ActionSupport{

	private static final long serialVersionUID = 1L;
	
	private int age;

	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public String execute() throws Exception {
		return SUCCESS;
	}
	
}
(2)根據以上的步驟,我們需要建立兩個配置檔案
對應註冊的配置檔案:檔名為VariousAction-ageregister-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
  		"-//Apache Struts//XWork Validator 1.0.3//EN"
  		"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>
	<field name="age">
	<span style="white-space:pre">	</span><field-validator type="int">
			<param name="min">20</param>
			<param name="max">30</param>
			<message>年齡必須在${min}與${max}之間</message>
		</field-validator>
	</field>
</validators>
對應修改的配置檔案:檔名為VariousAction-agemodify-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
  		"-//Apache Struts//XWork Validator 1.0.3//EN"
  		"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
  		
<validators>
	<field name="age">
		<field-validator type="int">
			<param name="min">30</param>
			<param name="max">50</param>
			<message>年齡必須在${min}與${max}之間</message>
		</field-validator>
	</field>
</validators>
註冊和修改頁面內容都一樣,唯一不同的就是actionName不同,註冊介面中表單的action=“ageregister”,修改介面中action=“agemodify”
<s:form action="ageXxx">
	<s:textfield name="age" label="age"></s:textfield>
	
	<s:submit></s:submit>
</s:form>
(3)最後需要在struts.xml中配置
 <!-- 年齡註冊action -->
       <action name="ageregister" class="com.struts.actions.VariousAction">
       		<result name="input">/ageregister.jsp</result>
       		<result name="success">/success.jsp</result>
       </action>
       <!-- 年齡修改action -->
       <action name="agemodify" class="com.struts.actions.VariousAction">
       		<result name="input">/agemodify.jsp</result>
       		<result name="success">/success.jsp</result>
       </action>
執行結果,註冊和修改介面分別對應為:

在這個例子中,介面和請求action都是不同的,但是在後臺所屬的Action類是同一個,而這兩個驗證的實現就在於這兩個配置檔案,struts2框架通過配置檔案的名字與action相對應,然後執行。

二. 非欄位驗證: 不是針對於某一個欄位的驗證. 

在這裡有個非常典型的案例,就是在註冊的時候的密碼驗證問題,那麼就接著上面的例子,以年齡註冊Action為例。

(1)在Action類中加入兩個欄位:private String password1、private String password2;

(2)修改上面的年齡註冊驗證檔案如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
  		"-//Apache Struts//XWork Validator 1.0.3//EN"
  		"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>
	<field name="age">
		<field-validator type="int">
			<param name="min">20</param>
			<param name="max">30</param>
			<message>年齡必須在${min}與${max}之間</message>
		</field-validator>
	</field>

	<!-- 非欄位驗證 -->
	<!-- expression : 用來驗證給定欄位是否滿足一個 OGNL 表示式. 
		在驗證失敗時將生成一個 action 錯誤
		expression*: 用來進行驗證的 OGNL 表示式
	 -->
	<validator type="expression">
		<param name="expression">password1==password2</param>
		<message>兩次密碼必須相同</message>
	</validator>

</validators>
這裡需要注意的是在exception引數中一般會有比較符號可能會影響xml的規範所以在此引數中,所以一般會寫在![CDATA[]]中

所以配置檔案中的expression引數可以配置為:

<param name="expression"><![CDATA[password1==password2]]></param>

(3)配置檔案不需改動,在年齡註冊介面中加入:

<s:textfield name="password1" label="password1"></s:textfield>
<s:textfield name="password2" label="password2"></s:textfield>

在這裡需要注意的一點是這個錯誤是action型別的錯誤,應該加上s:actionerror 標籤才能顯示出來:

<s:actionerror/>

(4)結果:



三. 自定義驗證器:

(1)定義一個驗證器的類
自定義的驗證器都需要實現 Validator. 也可以選擇繼承它的實現類如: ValidatorSupport 或 FieldValidatorSupport 類。若希望實現一個一般的驗證器, 則可以繼承 ValidatorSupport,若希望實現一個欄位驗證器, 則可以繼承 FieldValidatorSupport。

(2)在配置檔案中配置驗證器

配置驗證器的方法和之前的內建器是一樣的,在這裡主要說的是把自定義的驗證器配置到struts2框架中。預設情況下下, struts2 會在 類路徑的根目錄下載入 validators.xml 檔案, 在該檔案中載入驗證器,該檔案的定義方式同預設的驗證器的那個配置檔案: 位於 com.opensymphony.xwork2.validator.validators 下的 default.xml。如果validators.xml檔案中沒有當前的驗證器,會轉往default.xml檔案中尋找。

既然瞭解了步驟,那麼就以簡單例子說明,接著上面的例子:

先說一下需求,不允許使用者所輸入的字串中是否含有空格。

(1)原理很簡單,只需要用String類裡的contains()方法即可,那麼自定義欄位驗證器為:

import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;

public class BlankValidator extends FieldValidatorSupport {

	@Override
	public void validate(Object object) throws ValidationException {
		
		String name = getFieldName();//獲取欄位的名字
		Object fieldValue = getFieldValue(name, object);//獲取欄位的值
		String value = (String)fieldValue;//強轉為String型別
		//如果包含空格,則加入所要提醒的欄位錯誤 即在配置檔案中所寫的<message/>
		if(value.contains(" ")){
			addFieldError(name, object);
		}
	}

}

(2)將自定義驗證器註冊到struts2框架中

在src下建立validators.xml檔案

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator Definition 1.0//EN"
        "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">

<validators>

	<validator name="blank" class="com.struts.myvalidator.BlankValidator"></validator>

</validators>
(3)修改年齡註冊的驗證配置檔案,給兩個密碼欄位加入空格驗證
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
  		"-//Apache Struts//XWork Validator 1.0.3//EN"
  		"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>
	<field name="age">
		<field-validator type="int">
			<param name="min">20</param>
			<param name="max">30</param>
			<message>年齡必須在${min}與${max}之間</message>
		</field-validator>
	</field>
	
	<!-- 自定義欄位驗證器 -->
	<field name="password1">
		<field-validator type="blank">
			<message>欄位中不能含有空格</message>
		</field-validator>
	</field><pre name="code" class="html"><span style="white-space:pre">	</span><field name="password2">
		<field-validator type="blank">
			<message>欄位中不能含有空格</message>
		</field-validator>
	</field>

(4)執行結果:


可以看出自定義驗證器已被框架識別。

相關推薦

struts2宣告驗證後續定義驗證

在宣告式驗證中,只學會如何配置內建驗證器是不行的,因為驗證的配置中有很多技巧,那麼這篇文章中會分析以下三個問題: 一. 若 Action 類對應多個 action 請求, 且 action 請求使用不同的驗證規則 (1)為每一個不同的 action 請求定義其對應的驗證檔案

如何使用thinkphp 5內建驗證功能定義驗證方法

一個獨立的系統,僅僅只在前臺進行表單驗證是遠遠不夠的,在處理 PHP 表單時提交時需重視安全性,我們需對 HTML 表單資料進行適當的驗證對於防範黑客很重要。 使用ThinkPHP 5框架做專案時,

struts2宣告驗證

struts2框架中提供大量的內建校驗器,使用時只需對這些校驗進行配置,我們管這種方式叫做宣告驗證。其實這個流程和之前介紹的程式設計驗證是一樣的,可以參考之前輸入驗證的流程。 一.編寫配置檔案:檔名為ActionClassName-validation.xml,與要驗證屬性

Spring Security驗證流程剖析定義驗證方法

com UNC title 具體實現 hold any pan imp uil Spring Security本質上是一連串的Filter, 然後又以一個獨立的Filter的形式插入到Filter Chain裏,其名為FilterChainProxy。 如圖所示。 實

大資料入門教程系列Hive內建函式定義函式

本篇文章主要介紹Hive內建函式以及自定義UDF函式和UDFT函式,自定義UDF函式通過一個國際轉換中文的例子說明。 操作步驟: ①、準備資料和環境 ②、演示Hive內建函式 ③、自定義UDF函式編寫、演示   詳細步驟: 一、準備資料和

SpringMVC中沒有檔案驗證註解怎麼辦?定義驗證註解@ValidFile解決問題

在web專案開發過程中,檔案上傳是一個很常見的功能,但是我們常常需要對上傳檔案的大小,檔案的格式,上傳的檔案是否空等進行判斷,SpringMVC中我們只需要簡單的配置就可以實現上傳檔案功並對上傳的檔案限制,Springboot中預設開啟檔案上傳配置,預設採用Servlet3.0檔案上傳的API實現,

Struts2學習2(請求引數的封裝,型別轉換,輸入驗證定義攔截)

封裝請求引數 動態引數注入(請求引數,使用者輸入的) 方式一(動作類作為模型) 頁面 <form action="${pageContext.request.contextPath}/q1/login.do" method="pos

struts2定義攔截攔截生命週期分析

一,概述 本文主要是關於怎樣自定義攔截器及通過自定義的攔截器來了解攔截器的生命週期. 二,自定義攔截器 1)寫一個攔截器類HelloInterceptor,它實現了Interceptor介面. pac

Laravel加密解密/日誌/異常處理定義錯誤

文件中 例如 tom 處理器 crypt return cat 情況 而不是 一.加密解密 1.加密Crypt::encrypt($request->secret) 2.解密try {   $decrypted = Crypt::decrypt($encryptedV

struts2學習(6)定義攔截-登錄驗證攔截

back tps class res urn fff .com space war 需求:對登錄進行驗證,用戶名cy 密碼123456才能登錄進去;   登錄進去後,將用戶存在session中; 其他鏈接要來訪問(除了登錄鏈接),首先驗證

Jquery Validate 默認校驗規則常用的定義驗證規則

字符 eth ber exp string amp 手機 zip 子郵件 Jquery Validate 相關參數及常用的自定義驗證規則 一、官網地址:http://bassistance.de/jquery-plugins/jquery-plugin-validatio

定義驗證這能輸入數字(包括小數 負數 )

key 多個 class script 數字 是否 pre blur 如果 <script type="text/javascript"> function onlyNumber(obj){ //得到第一個字符是否為負號

spark源碼系列累加器實現機制定義累加器

大數據 spark一,基本概念 累加器是Spark的一種變量,顧名思義該變量只能增加。有以下特點: 1,累加器只能在Driver端構建及並只能是Driver讀取結果,Task只能累加。 2,累加器不會改變Spark Lazy計算的特點。只會在Job觸發的時候進行相關累加操作。 3,現有累加器的類型。相信有很

React學習旅----按需載入Antd UI元件定義主題

package.json "babel": { "presets": [ "react-app" ], "plugins": [ [ "import", { "libraryName": "a

Jquery Validate 相關參數常用的定義驗證規則

手機號碼驗證 cti dea 復制 接收 least join cep mat 一、官網地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 二、默認校驗規則 1

Struts2定義攔截案例:驗證使用者是否登入攔截

Struts攔截器是struts最強大的功能之一,也是他的核心 它可以在Action前後做一些事情,比如使用者登入驗證,這裡主要針對使用者登入配置詳細說明 一 首先自定義一個使用者攔截類,必須實現Interceptor介面或者繼承他的實現類 因為我們是要攔截使用者登入的,這裡繼承Meth

第28講 .struts2定義驗證

在專案 HeadFirstStruts2chapter07 下,在src下匯入validator.xml檔案, 新建一個com.cruise.validators包,新建SensitiveWorkds類,繼承,寫驗證方法,package com.cruise.validators;impo

EasyUIremote多引數定義驗證

$.extend($.fn.validatebox.defaults.rules, { username: { validator: function(value){ var rex = /^1(3|4|

Fegin整合Hystrix實現宣告服務呼叫服務熔斷降級

1:fegin集成了Hystrix。所以只需要引入feigin的依賴: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud

Struts2編寫定義驗證攔截敏感詞彙(十二)

  “兩個蝴蝶飛”特別喜歡"java1234知識分享網"小峰的實用主義,所以本文及其系列文章均是採用實用主義,從專案和程式碼的角度去分析。由於本人經驗有限,嘴皮子不溜,所以學術性,概念性,底層性的知識點暫時不做介紹。文章中有錯誤之處,歡迎拍磚和指點。特別感謝"java1234