Struts2 入门4 数据校验_类型转换_国际化

14 篇文章 0 订阅

一.数据校验

前台校验:客户段校验
主要通过JavaScript,效率高,但不安全.
后台校验:服务器校验
这里是struts2通过xml配置/java代码.效率比较低,但安全.

1.Struts2数据校验

a.java代码数据验证
        // 对象,封装请求的数据
	private User user;
	public void setUser(User user) {
		this.user = user;
	}
	public User getUser() {
		return user;
	}
	/**
	 * 1.数据验证的方法(简单的手动数据验证)
	 */
	//public void validate() {   // 验证所有方法: validate()
	public void validateRegister() {   // 验证指定的方法: validate要验证的方法名()
		// 用户名、密码验证
		//if (user != null) {
			// --> 验证用户名
			if (user.getName() == null || "".equals(user.getName())) {
				// 用户名不合法!  添加错误信息到map
				super.addFieldError("user.name", "用户名不能为空!");  // 错误map不为空!
				
			}
			
			if (user.getPwd() == null || "".equals(user.getPwd())) {
				// 密码不合法!
				super.addFieldError("user.pwd", "密码不能为空!");
			}
			
		//}
	}
	//jsp中错误信息的显示:<s:fielderror fieldName="user.pwd"></s:fielderror>
b.配置文件数据验证
配置文件的数据验证
配置文件的命名方法:
ActionClassName-validation.xml    验证action中的所有方法
ActionClassName-actionName-validation.xml  验证指定action中的方法



      
	<validators>
		<!-- 验证“用户名字段”   user.name 对应Action中要验证的属性!-->
		<field name="user.name">
			<!-- 指定验证器类型 -->
			<field-validator type="requiredstring">
				<message>用户名不能为空!</message>
			</field-validator>
		</field>
	</validators>
	
	//验证器查看:xwork-core-2.3.4.1.jar/com.opensymphony.xwork2.validator.validators/default.xml

二.国际化

配置国际化资源文件:
命名规则:基础名_语言简称_国家简称.properties
如:msg_zh_CN.properties
1. 通过常量加载资源文件
<!-- value的值是资源文件的包名+资源文件基础名 -->
<constant name="struts.custom.i18n.resources" value="cn.itcast.b_i18n.msg"></constant>

2.jsp通过便签加载资源文件
<!-- name的值是资源文件的包名+资源文件基础名 -->
<s:i18n name=" cn.itcast.b_i18n.msg "></s:i18n>
3. struts提供了国际化的标签
 通过text标签,可以显示国际化字符串
 name  值资源文件中配置的key
<s:text name="username"></s:text>

三.类型转换器

|-- interface TypeConverter 类型转换的接口
|-- class DefaultTypeConverterstruts默认的类型转换器
|-- abstract class  StrutsTypeConverter
自定义类型转换器可以继承此类

a.自定义类型转换器

        //继承StrutsTypeConverter类
	public class MyDataConvert extends StrutsTypeConverter{
		
		/**
		 * 把表单提交的字符串,转换为指定的目标类型!  (String--> Date)
		 * 
		 * 参数1: Action的上下文map(contextMap)
		 * 参数2: 表单提交的数据!为数组类型,一般取数组第一个元素!  <input type=texg name=userName /> 值
		 * 参数3: 要转换的目标类型
		 */
		public Object convertFromString(Map context, String[] values, Class toClass) {
			
			// 判断: 数组如果为null,直接返回null
			if (values == null || values.length == 0){
				return null;  // 不需要转换了
			}
			
			// 判断: 提交的属性类型,如果不是日期类型,不需要转换
			if (Date.class != toClass) {
				return null;
			}
			
			/*
			 * 当前属性是日期类型,需要转换
			 */
				try {
					// 格式转换,转换成功,就直接返回!
					Date birth = formats[i].parse(values[0]);		// 字符串转换为日期
					return birth;
				} catch (ParseException e) {
					...
				}
			
			return null;
		}

		@Override
		public String convertToString(Map context, Object o) {
			return null;
		}
	}



b.配置转换器资源文件
命名规则:ActionClassName-convertion.properties局部类型转换器
文件放于Action同一个包目录下
xwork-conversion.properties全局类型转换器(项目的所有Action都可以用)
将自定义类型转换配置到资源文件中:
RegisterAction-conversion.properties
user.birth=cn.itcast.c_convert.MyDataConvert

四.模型驱动

|--interface ModelDriven<T> 模型驱动接口,T为封装的对象的类
模型驱动的实现,用到模型驱动拦截器:
<interceptor 
	name="modelDriven" 
	class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"
/>
作用:
把请求表单的元素数据(表单的属性名与对象属性相同),自动填充到Action中的对象中.
public class UserAction extends ActionSupport implements ModelDriven<User>{
	
		private User user = new User();
	//	public void setUser(User user) {  // 可以不用写set方法
	//		this.user = user;
	//	}
		public User getUser() {
			return user;
		}
		//用户名: <input type="text" name="name"> 
		/*********重写***********/
		@Override
		public User getModel() {
			return user;
		}
					
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值