struts2資料校驗

渴睡人的眼發表於2018-07-16

當前端通過form表單或者js程式碼將資料提交給後臺之後,我們需要對資料進行校驗。

struts2資料校驗的方式。

一.通過程式碼方式驗證

在使用程式碼的方式進行資料校驗時,我們只需要在需要資料校驗的action中重寫 validate() 方法,在方法內部寫入校驗的程式碼即可。攔截器會自動為action中的每個方法增加該驗證。如果需要對action中特定的某個方法增加資料校驗,則資料校驗方法的方法需按:validate+方法名 格式命名,程式碼如下。

package com.xalo.action;

import com.opensymphony.xwork2.ActionSupport;

/*
 * 如果action中要使用struts2提供的資料校驗攔截器,
 * 需要繼承ActionSupport介面
 */

public class ValAction extends ActionSupport{
	private String userName;
	
	private String password;
	

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	private static final long serialVersionUID = 1L;
	
	@Override
	public String execute() throws Exception {
		System.out.println("未指定要執行的方法");
		return NONE;
	}
	
	//增加
	public String add(){
		
		System.out.println("增加");
		
		return NONE;
	}
	
	//刪除
	public String delete(){
		
		System.out.println("刪除");
		
		return NONE;
	}
	
	//修改
	public String update(){
		System.out.println("修改");
		return NONE;
	}
	
	//查詢
	public String query(){
		System.out.println("查詢");
		return NONE;
	}
	
	/*
	 * 用作資料校驗的方法,前端提交的資料需要在此方法中進行校驗,
	 * 如果校驗不通過,不會執行action中的其餘方法。尋找result中
	 * 名稱為input的介面去跳轉
	 * 
	 * 對當前action中所有的方法都加資料校驗
	 */
	@Override
	public void validate() {
		System.out.println("執行了validate方法");
		if (userName == null || userName.length()==0) {
			//將錯誤資訊存放進值棧的root中
			super.addFieldError("userName","使用者名稱不能為空");
		}
		if(password == null || password.length()==0){
			super.addFieldError("password", "密碼不能為空");
		}
		super.validate();
	}
	
	//對指定方法加資料校驗 validata+要資料校驗的方法名
	/*
	 * 校驗通過還是不通過,根據root中的FieldErrors中是否有資訊來判斷
	 * 如果該map中有資訊,驗證就不通過,在攔截器中return "input"
	 * 如果該map中沒有資訊,驗證就通過,這行下一個攔截器
	 * return invcation.invoke();放行
	 */
	public void validateAdd(){
		if(userName==null){
			System.out.println("add校驗方法");
			super.addFieldError("userName", "使用者名稱不能為空");
		}
	}
	
	public void validateQuery(){
		System.out.println("query校驗方法");
	}
	
}

二.通過配置檔案方式

運用程式碼方式可以完成對資料的校驗,但是在使用時候相對繁瑣,因此通常都是採用配置檔案的方式完成對資料的校驗。在使用配置檔案進行資料校驗時,檔案命名格式:actionName-validate.xml,其中actionName就是需要進行資料校驗的action的類名。

若要對action中某個方法執行資料校驗,則命名格式:actionName-actionMethodName-validation.xml,其中actionName就是需要進行資料校驗的action的類名,actionMethodName就action中要進行資料校驗的方法的方法名。

<?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>
	<!-- 
		要驗證的資料
		name:對應action中的欄位名
	 -->
	 <field name="userName"> 
	 	
	 	<!--校驗器。type:校驗型別 -->
	 	<!-- 欄位值不能為null,也不能是空字串 -->
	 	<field-validator type="requiredstring">
	 		
	 		<!--配置引數資訊。是否去除String前後留白-->
	 		<!-- <param name="trim">true</param> -->

	 		<!-- 校驗不通過,錯誤資訊 -->
	 		<message>使用者名稱不能為空</message>
	 	
	 	</field-validator>
	
	 </field>
	 
	 <field name="age">
	 	<field-validator type="required">
	 		<message>年齡不能為空</message>
	 	</field-validator>
	 	<field-validator type="int">
	 		<param name="min">0</param>
	 		<param name="max">150</param>
	 		<message>年齡超出範圍</message>
	 	</field-validator>
	 </field>
	 
	 <field name="height">
	 	<field-validator type="required">
	 		<message>身高不能為空</message>
	 	</field-validator>
	 	<field-validator type="double">
	 		<param name="minExclusive">1.6</param>
			<param name="maxExclusive">2.26</param>
			<message>身高不在範圍內</message>
	 	</field-validator>
	 </field>



	
</validators>

校驗型別有很多種,我們根據需求填入系統提供校驗器的名稱。

系統提供校驗器的位置如下:struts2-core-2.5.16.jar/com.opensymphony.xwork2.validator.validators/default.xml中。

原始碼如下

<?xml version="1.0" encoding="UTF-8"?>
<!--
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
-->
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator Definition 1.0//EN"
        "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">

<!-- START SNIPPET: validators-default -->
<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="creditcard" class="com.opensymphony.xwork2.validator.validators.CreditCardValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
<!--  END SNIPPET: validators-default -->

 

相關文章