Struts2类型转换,数据验证

一、数据类型转换

1、struts内部自动将页面获取到的字符串类型的数据转为数据库中的类型的  insert,update,delete

public class MyConverter extends StrutsTypeConverter{
	 private SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
	 
	 public Object convertFromString(Map arg0,String[] arg1, Class arg2){
		 //判断有没有被转换的数据
		 if(arg1==null||arg1.length==0)
			 return null;
		 //得到被转换的数据
		 String data = arg1[0];
		 if(arg2==java.util.Date.class){
			 try{
				 return sdf.parse(date);
			 }catch(ParseException e){
				 e.prinStackTrace();
				 return null;
			 }
		 }
		 return null;
	 }
	

2、把数据库中某种类型的数据转成字符串显示在页面上  select查询

struts2实现的自动转换:

1:基本数据类型的转换

2:本地各式的日期类型(yyyy-MM-dd)———Date

3:把值是String[]类型的转换成了用“,+空格" 间隔的字符串

二、自定义类型转换器:

TypeConverter  的子类DefaultTypeConverter的子类 StrutsTypeConvrter

定义好的类型转换器需要注册:

a:该类型转换期只能被特定的类使用(局部的)

b:该类型转换器可以被全局使用(全局的)


1、把页面上的MM/dd/yyyy格式的日期转成Date类型

//第一个参数是OGNL上下文,第二个参数是被转换的数据,第三个参数是转成的类型

public class MyConverter extends StrutsTypeConverter{
	 private SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
	 
	 public Object convertFromString(Map arg0,String[] arg1, Class arg2){
		 //判断有没有被转换的数据
		 if(arg1==null||arg1.length==0)
			 return null;
		 //得到被转换的数据
		 String data = arg1[0];
		 if(arg2==java.util.Date.class){
			 try{
				 return sdf.parse(date);
			 }catch(ParseException e){
				 e.prinStackTrace();
				 return null;
			 }
		 }
		 return null;
	 }
	

2、把Date类型的日期转成字符串

c、定义好的类型转换器需要注册

1、局部的类型转换器,文件名的命名规则:JavaBean的名称-conversion.properties


birthday=com.lzh.web.converter,MyConverter   //键是字段名,值是类型转换器的类路径

2、定义全局的类型转换期,文件的命名规则是xwork-conversion.propertioe

java.util.Date=com.lzh.web.converter.MyConverter(转换器包名+转换器类名)


三、没有自定义类型转换器时的错误处理

1、定义结果视图 input

<result name="input">/regist.jsp</result>  数据回显

问题是回来了,但是没有显示数据


<%@ taglib uri="/struts-tags" prefix="s"%> struts的标签库

<s:filederror/>——只是显示错误信息,实现数据的回显,必须使用struts2的表单

struts2 的form和html的表单差不多

action:可以直接写动作

method:默认是post

enctype:表单编码的MIME类型

发生类型转换错误时为什么加入input结果视图就能实现数据回显?

拦截器conversionError实现的这个功能

注意:动作类必须继承ActionSupport


<s:form action = "regist.action">
   		<s:textfield name="username" label="用户名"></s:textfield>
   		<s:password name="password" label="密码" showPassword="true"></s:password>
   		<s:textfield name="birthday" label="出生日期"></s:textfield>
   		<s:submit value="注册"></s:submit>
 </s:form>


2、

User.properties

invalid.field

四、数据验证

客户端验证,服务器端验证


服务器端验证:
1、编程式验证:写代码验证:写死了,硬编码

验证写在Action中,动作类中必须继承ActionSupport。重写ActionSupport中的public void validate()方法
Struts2内部封装了一个Map,Map的键就是表单上的name的值,Map的值就是错误信息

StringUtils.isEmpty()——判断是否为null或空字符串,但是不去除空格
StringUtils.isBlank()—— 判断是否为null或空字符串,去除空格
默认:validate方法在所有方法执行之前执行,为了让不需要验证的不去执行validate方法,解决方式有两种:
1:使用注解:@SkipValidation(给不需要执行的方法前加)
2:验证的方法名:validate+动作方法名
public void validateRegist
public void validate(){
//验证用户名不能为空
if(StringUtils.isEmpty(user.getUsername())){
addFieldError("username","用户名不能为空");
}
}

2、声名式验证:写xml代码验证
通过xml文件实现验证
在动作类所在的包下创建xml文件
文件名有命名规则:动作类名-validation.xml,默认验证动作类中的所有动作方法
希望某些方法不被验证1、加注解!@SkipValidation
2、xml文件名改成:动作类名-动作名-validation.xml
在xml文件中加入dtd约束(struts——apps——lib下的xwork-core.jar包中找到xwork-validator-1.0.3.dtd)

基于字段的验证:
<validators>
  	<!-- 基于字段的验证 -->
  	<field name="username">
  	<!-- 怎么验证,struts内部定义了很多的验证器
  		requiredstring判断是否为null,或空字符串,去空格 -->
  	<field-validator type="requiredstring">
  		<message>用户名不能为空</message>
  		</field-validator>
  	</field>
  </validators>

基于验证器的验证:
 <validators>
  	<!-- 基于验证器的验证 -->
  
  	<!-- 怎么验证,struts内部定义了很多的验证器-->
  	<validator type="requiredstring">
  	<!-- 使用注入的方式指明验证谁 
  		private String actionName
  		setActionName()-->
  	<param name ="fieldName">password</param>
  		<message>用户名不能为空</message>
  		</validator>
  	</field>
  </validators>

小知识 1、选择框 <s:radio list="{‘男’,‘女’}">

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值