Struts中的基本类型是可以通过struts的默认类型转化器转化的..日日类型默认的是1992-02-03这样的格式,如果我们填写1992年02月03日,name就会报错...因此我们需要进行类型转化...
1.局部类型转化器:
开发步骤:
(1)写一个类型转化器继承StrutsTypeConverter这个类.
(2)在要转化的类的同级目录下写一个和ActionName-conversion.properties的配置文件,如我这里要转化的是UserAction类中date类型...
(3)在这个配置文件中写要转化的属性=类型转化器的全名.
user.date=cn.itcast.converter.MyConverter
2.全局类型 转化器
(1)写一个类型转化器继承StrutsTypeConverter这个类
(2)在src下写一个名称为xwork-conversion.properties的配置文件
(3)内容是:
java.util.Date=cn.itcast.converter.MyConverter
注册表单:(struts的配置文件略)
<body>
<form action="${pageContext.request.contextPath}/user/register" method="post">
username:<input type="text" name="user.username"/><br>
age:<input type="text" name="user.age"/><br>
date:<input type="text" name="user.date"/><br>
<input type="submit" value="提交">
</form>
</body>
自定义类型转化器:
package cn.itcast.converter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class MyConverter extends StrutsTypeConverter{
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
DateFormat[] df={new SimpleDateFormat("yyyy-MM-dd"),new SimpleDateFormat("yyyy年MM月dd日"),new SimpleDateFormat("yyyyMMdd")};
//判断是不是为null
if(values==null||values.length==0){
return null;
}
//判断是不是Date类型
if(Date.class!=toClass){
return null;
}
for(int i=0;i<df.length;i++){
Date date;
try {
date = df[i].parse(values[0]);
} catch (ParseException e) {
continue;
}
return date;
}
return null;
}
@Override
public String convertToString(Map context, Object o) {
return null;
}
}
UserAction:要转化是这个类中的user.date属性
package cn.itcast.type;
import cn.itcast.domain.User;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String register(){
System.out.println(user.getUsername()+"=="+user.getAge()+"=="+user.getDate());
return "register";
}
}
如果是:局部配置文件:
user.date=cn.itcast.converter.MyConverter
如果是:全局配置文件
java.util.Date=cn.itcast.converter.MyConverter
当我们在表单中填写如下内容:
控制台打印:
李卫康==22==Sat Sep 12 00:00:00 CST 1992