类型转换器是将浏览器传递的参数进行转换为了与服务器端的参数匹配,先举个例子如果我们想往服务器传递日期类型的参数时我们要怎么让浏览器传过去的让服务器明白
我们新建一个类 ConverterTest.java
package com.day03;
import java.util.Date;
public class ConverterTest {
private Date birthday;
private String bir;
public void setBirthday(Date birthday){
this.birthday = birthday;
}
public Date getBirthday(){
return this.birthday;
}
public String execute(){
return "success";
}
}
然后我们在/WEB-INF/page/birthday.jsp 这里只需要<body><center><h1>${bir}</h1></center></body>这样就能在页面显示数据
最后在struts.xml中配置action
<action name="birthday" class="com.day03.ConverterTest">
<result>/WEB-INF/page/birthday.jsp</result>
</action>
我们直接访问http://localhost/Struts/day03/birthday.do?birthday=2012-02-27时显示服务器能解析2012-02-27
那么我们用的不是2012-02-27 而是 20120227 呢
什么都没有,现在我们来用自定义转换器转换 让服务器能识别20120227
首先格式转换器分为局部的和全局的
局部类型转换器
首先我们新建转换器类MyConverter.java
必须继承上面的类 第一个和第二个 我试了试 都好使 反正继承DefaultTypeConverter类
然后重写方法
@Override
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
// TODO Auto-generated method stub
return super.convertValue(context, value, toType);
}
value是浏览器传递的数据toType是待转换的类型 这里是Date.class
然后在函数中实现相关的转换
@Override
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); //创建日期转换对象
String[] birthday = (String[]) value; //将浏览器传递的数据转换成字符串数组
Date date = new Date();
try {
date = sdf.parse(birthday[0]); //将字符串数组的第一个数字转换成日期类型
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return date;
}
上面讲浏览器传递的数据转换成字符串数组是因为struts传递的数据是通过数组的形式传递,因为可能有些参数时同名的一个名字有好几个值所以先转换成字符数组
下面我们在ConterverTest.java的包下创建配置文件
名字必须是 需要转换的类名-conversion.properties 这里是conterverTest-conversion.properties;
里面的格式是
需要转换的字段 = 类型转换器的绝对路径
这里是birthday = com.day04.Converter
细心的读者可以看到上面的url和以前的不,是因为昨天struts的问题调了一天也没有调出来 今天重新做的一个 但是步骤代码是一样的
下面我们来看看全局的类型转换器 首先删除配置文件ConverterTest-conversion.properties
然后在src下创建配置文件 xwork-conversion.properties里面这样配置
java.util.Date = com.day04.Converter
还是好使 的