类型转换器

类型转换器的作用:
     把表单传到action的数据在中途中进行更改。

一、局部类型转换器
流程:
表单提交数据->调用配置文件properties->调用自定义的数据转换类->action接受数据->welcome.jsp输出数据。
login.jsp
<form action="login.action" method="post">
学好:<input type="text" name="id"><br>
时间:<input type="text" name="bri"><br>
<input type="submit" value="提交">
</form>
LoginAction.java
package com.action;
import java.util.Date;
public class LoginAction {
      private int id;
      private Date bri;
      public int getId() {
            return id;
      }
      public void setId(int id) {
            this.id = id;
      }
      public Date getBri() {
            return bri;
      }
      public void setBri(Date bri) {
            this.bri = bri;
      }
      public String execute(){
            
            System.out.println(id);
            System.out.println(bri);
            return "success";
      }
}
定义类型转换类:DateConverter
package com.converter;
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
public class DateConverter extends DefaultTypeConverter{
      @Override
      public Object convertValue(Object arg0, Class arg1) {
            String str = ((String[])arg0)[0];
            
            System.out.println("11111");
            if(arg1==Date.class){
                  try {
                        SimpleDateFormat sd = new SimpleDateFormat("yyyy/mm/dd");
                        return sd.parse(str);
                  } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                  }
            }
        return null;
      }
}
配置文件:LoginAction-conversion.properties
bri=com.converter.DateConverter //数据转换类的具体路径
该配置文件必须在action的同级目录下,且名称必须为:action名-conversion.properties。

注意:
1、定义类型转换类时,使用Date类型是,会自动导入java.sql.Date包,要改为:java.util.Date。
2、在实现抽象类时,Object类型参数是个数组。

二、全局类型转换器
相对于局部类型转换器,全局类型转换器只需要更改properties配置文件即可。
新建配置文件必须在src目录下,且名称必须为:xwork-conversion.properties
配置文件:xwork-conversion.properties
java.util.Date=com.converter.DateConverter

三、转换器中异常信息的处理
修改转换器代码:
package com.converter;
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import com.opensymphony.xwork2.conversion.TypeConversionException;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
public class DateConverter extends DefaultTypeConverter{
      @Override
      public Object convertValue(Object arg0, Class arg1) {
            String str = ((String[])arg0)[0];

            System.out.println("11111");
            if(arg1==Date.class){          
                  try {
                        SimpleDateFormat sd = new SimpleDateFormat("yyyy/mm/dd");
                        if(!str.matches("^\\d{4}/\\d{2}/\\d{2}$")){
                              throw new TypeConversionException();
                        }
                        return sd.parse(str);
                  } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                  }
            }     
            return null;
      }
}
修改action继承关系:
package com.action;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
      private int id;
      private Date bri;
      public int getId() {
            return id;
      }
      public void setId(int id) {
            this.id = id;
      }
      public Date getBri() {
            return bri;
      }
      public void setBri(Date bri) {
            this.bri = bri;
      }
      public String execute(){
            System.out.println(id);
            System.out.println(bri);
            return "success";
      }
}
修改表单页面,添加错误提示信息:
${fieldErrors.bri[0] }
<form action="login.action" method="post">
学好:<input type="text" name="id"><br>
时间:<input type="text" name="bri"><br>
<input type="submit" value="提交">
</form>


欢迎大家来提问或者提出意见。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值