struts自定义参数类型转换

概念

      当浏览器进行表单提交的时候,日期选择2017-08-09然后struts会把字符串转换成Date类型。这就是struts的类型转换。我们也可以自定义一个类型转换 (日期格式必须是这样才会转换)

原理

struts类型转换器格式

其中一个类的源码 

自定义的实现

     根据源码显示, 子类继承DefaultTypeConverter 也可以用StrutsTypeConverter来自定义类型转换 

     第一步 继承上文提到的两个类中的一个

     第二步 实现类中的两个抽象方法  convertFromString  convertToString  

     第三步 配置局部类型转换器           

图示的含义为当用户输入生日属性的时候使用我们自己定义的名为MyDateConvert的类型转换器

实现类的函数参数详解

string[]  values中存放的是表单中提交的所有对应的属性值为birthday的值 比如只有一个值就只存一个,有多个就存入数组,Class toClass传入的是目标类就是要转换成的类。

源码展示

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

public class MyDateConverter extends StrutsTypeConverter{

	/**
	 * 把字符串转成对象类型
	 */
	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		// TODO Auto-generated method stub
		/*System.out.println(toClass);
		for(String s: values){
			System.out.println(s);
		}*/
		if(values != null && values.length > 0){
			//取数据
			String dateStr = values[0];
			if("".equals(dateStr)){//空的字符串
				return null;
			}
			
			//转换
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
			try {
				return sdf.parse(dateStr);
			} catch (ParseException e) {
				//e.printStackTrace();
				throw new RuntimeException(e);//转换异常
			}
		}
		
		return null;
	}

	/**
	 * 把对象类型转成字符串类型
	 */
	@Override
	public String convertToString(Map context, Object o) {
		// TODO Auto-generated method stub
		return null;
	}

}

全局类型转换器  

        上文提到的转换只是针对对应的模型User的属性名为birthday的时候才会进行类型转换,假如还有一个模型 Order也有一个Date类型的变量需要进行类型转换,那么又要进行重复的操作 在struts中我们可以配置一个全局类型转换器

        第一步 在源目录下创建一个   

        第二步  写入内容             

        这样只要传入的数据中有date类型的数据那么会自动进行类型转换

                 

     

      

      

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值