1. 程式人生 > >Struts2 輸入校驗(Action中使用國際化資原始檔、校驗器校驗)

Struts2 輸入校驗(Action中使用國際化資原始檔、校驗器校驗)

Action類獲得國際化資原始檔中的資訊,主要使用ActionSupport類的getText方法進行。

ActionSupport類過載了很多getText方法,常用的有如下幾個:

1、getText(String aTextName):引數aTextName是資原始檔中的key值,可以返回對應的value值。

2、getText(String key,String[] args):引數key是資原始檔中的key值,args可以用來給資原始檔中的引數傳值。

messageResource_en_US.properties

#The Text
register.info=Please input your register Info:
#The Form
custname.label=Input your name
pwd.label=Input your password
age.label=Input your age
address.label=Input your address	
register.button=Register New Customer
#error message
custname.null=Input your custname,please.
pwd.null=Input your password,please.
custname.exit=Sorry,the custname already existed.
#action message
register.successful=Register successfully,login pls.

messageResource_zh_CN.properties
#The Text
register.info=\u8bf7\u8f93\u5165\u60a8\u7684\u6ce8\u518c\u4fe1\u606f\uff1a
#The Form
custname.label=\u8f93\u5165\u7528\u6237\u540d\uff1a
pwd.label=\u8f93\u5165\u5bc6\u7801\uff1a
age.label=\u8f93\u5165\u5e74\u9f84\uff1a
address.label=\u8f93\u5165\u5730\u5740	
register.button=\u6ce8\u518c\u65b0\u7528\u6237
#error message
custname.null=\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a\u3002
pwd.null=\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a\u3002
custname.exist=\u7528\u6237\u540d\u5df2\u5b58\u5728\uff0c\u8bf7\u7528\u5176\u4ed6\u7528\u6237\u540d\u6ce8\u518c\u3002
#action message
register.successful=\u6ce8\u518c\u6210\u529f\uff0c\u8bf7\u767b\u5f55\u3002

修改RegisterAction
public String register() {
		CustomerServiceImpl cs = new CustomerServiceImpl();
		cs.setDao(new CustomerDAOImpl());
		try{
			cs.register(cust);
			this.addActionMessage(this.getText("register.successful"));
			return "regsuccess";
		}catch (RegisterException e) {
			this.addActionError(this.getText("custname.exist"));
			e.printStackTrace();
			return "regfail";
		}
		
	}
	@Override
	public void validate(){
		String custname=cust.getCustname();
		String pwd = cust.getPwd();
		if(custname==null||custname.equals("")){
			this.addFieldError("custname", this.getText("custname.null"));
		}
		if(pwd==null||pwd.equals("")){
			this.addFieldError("pwd", this.getText("pwd.null"));
		}
	}
執行後顯示為資原始檔中配置的相關資訊。

校驗器校驗

Action對輸入進行校驗,不僅可以使用前面章節學習的手工編碼方式,還可以呼叫API 中提供的校驗器校驗。

下面列舉使用校驗器進行校驗的具體步驟:

1、Action類繼承ActionSupport類,但是不需要覆蓋validate方法。

2、在Action類所在包中建立“Action類名-validation.xml”形式的檔案。

在action包下配置RegisterAction-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE validators PUBLIC 
  		"-//Apache Struts//XWork Validator 1.0.2//EN"
  		"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
	<field name="custname">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message key="custname.null"></message>
		</field-validator>
	</field>
		<field name="pwd">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message key="pwd.null"></message>
		</field-validator>
	</field>
		<field name="age">
		<field-validator type="int">
			<param name="min">18</param>
			<param name="max">60</param>
			<message key="age.int"></message>
		</field-validator>
	</field>
			<field name="address">
		<field-validator type="email">
			<message key="address.email"></message>
		</field-validator>
	</field>
</validators>

上述程式碼中,

<field name="">表示對指定name的域進行校驗。

<field-validator type="">表示使用type指定的名字在的校驗器進行校驗。

在資原始檔中天劍age.int以及address.email鍵值,以定義錯誤資訊

#The Text
register.info=\u8bf7\u8f93\u5165\u60a8\u7684\u6ce8\u518c\u4fe1\u606f\uff1a
#The Form
custname.label=\u8f93\u5165\u7528\u6237\u540d\uff1a
pwd.label=\u8f93\u5165\u5bc6\u7801\uff1a
age.label=\u8f93\u5165\u5e74\u9f84\uff1a
address.label=\u8f93\u5165\u5730\u5740	
register.button=\u6ce8\u518c\u65b0\u7528\u6237
#error message
custname.null=\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a\u3002
pwd.null=\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a\u3002
custname.exist=\u7528\u6237\u540d\u5df2\u5b58\u5728\uff0c\u8bf7\u7528\u5176\u4ed6\u7528\u6237\u540d\u6ce8\u518c\u3002
#action message
register.successful=\u6ce8\u518c\u6210\u529f\uff0c\u8bf7\u767b\u5f55\u3002
#register message
age.int=\u5e74\u9f84\u5fc5\u987b\u5728${min}\u548c${max}\u4e4b\u95f4
address.email=\u5730\u5740\u5fc5\u987b\u662f\u4e00\u4e2a\u6709\u6548\u7684email\u5730\u5740\u3002
修改RegisterAction.java
package action;

import service.CustomerServiceImpl;
import vo.Customer;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import dao.Impl.CustomerDAOImpl;
import exception.RegisterException;

public class RegisterAction extends ActionSupport implements ModelDriven<Customer>{

	private Customer cust = new Customer();
	
    public String register(){  
        CustomerServiceImpl cs = new CustomerServiceImpl();  
        cs.setDao(new CustomerDAOImpl());  
        try{  
        cs.register(cust);  
        this.addActionMessage(this.getText("register.successful"));
        return"regsuccess";  
        }catch(RegisterException e) {  
        	this.addActionError(this.getText("custname.exit"));
            e.printStackTrace();  
            return "regfail";  
        }  
          
    }  
    /*  @Override  
    public void validate(){  
        String custname=cust.getCustname();  
        String pwd = cust.getPwd();  
        if(custname==null||custname.equals("")){  
           // this.addFieldError("custname", "Pls input your name.");  
        }  
        if(pwd==null||pwd.equals("")){  
           // this.addFieldError("pwd", "Pls input your password.");  
        }  
    }  */
    @Override  
    public Customer getModel() {  
        return cust;  
    }  
}


型別轉換

請求引數的型別都是String型別,而在實際應用中,卻往往需要將請求引數轉換成其他型別,

如int、double、List等API中的型別,或者其他自定義的型別。

Struts2框架的內建型別轉換有:

1、基本資料型別:int、boolean、double等,包括基本型別對應的包裝器型別,如Integer、Boolean、Double等。

2、日期型別

3、Collection集合型別。

4、Set集合型別。

5、陣列型別。

只要Action類繼承了ActionSupport類,則內建的型別轉換器將預設生效。

例:

當註冊年齡輸入字串時,會有預設的校驗錯誤資訊輸出:


如果需要修改預設的型別轉換校驗資訊,則只要在Action類的包中宣告區域性屬性檔案即可,

名字為“Action類名.properties”

invalid.fieldvalue.age=年齡必須是數字


當定義了局部屬性檔案後,校驗失敗資訊將被修改,不再使用預設的校驗資訊,而顯示屬性檔案中定義的校驗資訊。

相關推薦

Struts2 入校Action使用國際化原始檔

Action類獲得國際化資原始檔中的資訊,主要使用ActionSupport類的getText方法進行。 ActionSupport類過載了很多getText方法,常用的有如下幾個: 1、getText(String aTextName):引數aTextName是資原始檔中

Python教程補充內容函式接收元組列表和lambda的用法——簡明python教程學習筆記

本文大量內容來源於沈老師的簡明python教程,其中夾雜部分個人的理解如有偏頗之處還望海涵。 一. 在函式中接收元組和列表 \quad當要使函式接收元組或字典形式的引數的時候,有一種特殊的方法,它分別使用*和**字首。 這種方法在函式需要獲取可變數量的引數的

Struts2入校

exp cdata tin .get xwork scheme field -1 rac regist.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%

Struts2入校之validate入校方式

一.在Web系統專案中有大量的檢視頁面需要使用者自行輸入很多資料。這些資料的型別有很多種。為了防止某些客戶的惡意輸入以及對Web專案的惡意破壞,必須引入輸入校驗,像Windows作業系統的防火牆一樣把一些垃圾資料過濾掉,擋在Web系統之外。接下來就來介紹一下validate

Struts2 入校

一、Struts2輸入校驗介紹 Struts2的輸入校驗和型別轉換都是對請求引數進行處理。 輸入校驗顧名思義就是請求引數是否能夠滿足一定的要求; 客戶端校驗&伺服器端校驗 客戶端校驗是指在瀏覽器這端通過Javascript進

Struts2異常處理之在Action捕獲異常

    Struts為我們提供了一套異常處理機制。通常的做法是在jsp頁面中獲取並輸出異常資訊。 但是,一些開發情景中,也會有這樣一種情況,某Action丟擲異常之後,並不想跳轉到異常頁面,而是想把這個異常資訊傳到另一個Action中來處理。下面就為大家介紹這兩種異常處理方

struts2 升級2.3.35 action方法無法正常對映

內部專案,使用了maven,struts2則是使用了它的零配置特性(使用註解或預設約定) 1、maven中定義版本常量 <struts2.version>2.3.35</struts2.version> 2、struts2關鍵依賴相關jar內容(好

caffe的batchNorm層caffe 為什麼bn層要和scale層一起使用

caffe中的batchNorm層   連結: http://blog.csdn.net/wfei101/article/details/78449680 caffe 中為什麼bn層要和scale層一起使用 這個問題首先你要理解batchnormal是做什麼的。它其實

Struts2 通過超連結動態載入國際化原始檔

1.關鍵在於知道struts2框架是如何確定local物件的! 2.可以通過i18n攔截器知道 具體的原理可以上51cto學院http://edu.51cto.com/center/course/lesson/index?id=26432 第36、Struts2通過超連結動態載入國際

JAVA&&和&||和|短路與和邏輯與短路或和邏輯或的區別

問題一: JAVA中&&和&、||和|(短路與和邏輯與、短路或和邏輯或)的區別? 首先名稱是不同的 &&邏輯與  ||邏輯或  它們都是邏輯運算子 & 按位與  | 按位或  它們都是位運算子 if(a==1&&b==2) 這是說既要滿足a=1也要

webpack4系列教程:處理專案原始檔

傳送門: webpack4系列教程(一):初識webpack webpack4系列教程(二):建立專案,打包第一個JS檔案 webpack4系列教程(三):自動生成專案中的HTML檔案    1. Loader的使用 之前的博文已經介紹了Loader的

springmvc學習筆記13——國際化原始檔

                        為什麼要配置國際

Android 比對國際化原始檔的翻譯缺失

因為app要做英文,繁體,中文,目前三種翻譯。然後目前還在用eclipse開發,導致有的時候編譯器並沒有提示哪些有缺失翻譯。 又經常新增。導致有的欄位可能有漏掉。不僅僅是研發會漏掉,也有可能是翻譯人員會漏掉。所以利用閒暇時間,打了個jar包。 目前可以比

關於js事件物件DOM的事件物件IE的事件物件跨瀏覽器的事件物件的詳解

在觸發DOM上的某個事件時,會產生一個事件物件event,這個物件中包含著所有與事件有關的資訊。包括導致事件的元素、事件的型別以及其他與特定事件相關的資訊。例如,滑鼠操作導致的事件物件中,會包含滑鼠位置的資訊,而鍵盤操作導致的事件物件中,會包含與按下的鍵有關的資訊。所有瀏覽器

struts2配置包範圍國際化原始檔--包範圍

第一步: 目地:在一個大型應用中,整個應用有大量的內容需要國際化,如果我們把國際化的內容都放在全域性資源屬性檔案中,顯然會顯得資原始檔變得過於龐大,臃腫,不便於維護,這個時候針對不同模組,使用包的範圍來組織國際化檔案就顯得特別重要 配置包範圍資原始檔,其實十分簡單! 在包目

android應用開發過程更換原始檔不重新整理顯示舊原始檔問題

問題描述:         我們在開發android app專案的時候,經常會遇到需求更改和UI更改的情況,這樣我們就需要將已經寫好的介面中的元素換掉,例如將介面中的背景圖或者某個圖片換掉,這時,問題

SSH框架/JSP Servlet 從Action傳遞料到JSP頁面

使用 ActionContext進行傳值: 例子: public String login({ if(this.userService.loginUser(user)==null||this.userService.loginUser(user)

菜鳥學Python Day1.4導入模塊Import用戶交互Raw_input

python導入模塊 1.什麽是模塊? 2.導入模塊 Import moduleName (自帶200多個模塊,第三方模塊上千) Python標準庫 如下:導入模塊os.system內的的df,查看內存 查看模塊os可以導入很多方法os. tab健

深入jar包:從jar包讀取原始檔getResourceAsStream

一、背景   我們常常在程式碼中讀取一些資原始檔(比如圖片,音樂,文字等等)。   在單獨執行的時候這些簡單的處理當然不會有問題。但是,如果我們把程式碼打成一個jar包以後,即使將資原始檔一併打包,這些東西也找不出來了。   myproject     |___src   |___edu.hxrai

ServletContext讀取web原始檔

     servletcontext類字面上的意思是servlet是上下文,但是實際上就是在一個web專案裡面就只有一個servlet,所獲取到的這個類的物件都是隻有一個的;      他的方法特別多,今天只介紹如何獲取資原始檔;