Struts2数据类型转换,数据验证

  • -

一、数据类型转换

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

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
/regist.jsp 数据回显
问题是回来了,但是没有显示数据

<%@ taglib uri=”/struts-tags” prefix=”s”%> struts的标签库
——只是显示错误信息,实现数据的回显,必须使用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>  

四、数据验证

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

服务器端验证:
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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值