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=年龄必须是数字


当定义了局部属性文件后,校验失败信息将被修改,不再使用默认的校验信息,而显示属性文件中定义的校验信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值