此处 我们通过简单的例子实现对action下的某个属性字段进行类型转换
1)输入界面
<form action="userAction.action" method="post">
<input type="text" name="birthday" value=""><br>
<input type="submit" value="提交">
</form>
2)测试action ----UserAction 仅仅有个类型为Date的birthday属性
public class UserAction extends ActionSupport{
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
3)struts.xml配置文件 配置action
<action name="userAction" class="com.etc.sky.action.UserAction">
<result>/show.jsp</result>
</action>
4)自定义类型转换器类 实现 将表单输入的字符串转化为Date类型/获取birthday值的时候 将其转换为string便于页面显示
public class DateConverstor extends StrutsTypeConverter {
/**
* arg1为表单传入的参数 arg2为arg1需要转换的目标对象类型此处也即为java.util.date
* 该方法执行在action为属性注入值之前 即set方法之前
* */
@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
System.out.println(arg1[0]);
if(arg2==Date.class){
String birth=arg1[0];
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");
try {
Date date=sdf.parse(birth);
System.out.println("convertFromString"+date);
return date;
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
/**
* arg1为需要进行转换的对象 此处即为date
* 该方法执行在获取action属性值后 即get方法之后
* */
@Override
public String convertToString(Map arg0, Object arg1) {
if(arg1 instanceof Date){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
Date date=(Date) arg1;
String strDate=sdf.format(date);
System.out.println("convertToString"+strDate);
return strDate;
}
return null;
}
}
5)局部类型转换资源文件配置
命名规则为:要进行类型转换的action名-conversion.properties
内容为:action下要进行类型转换的属性=类型转换器类的全称(包名+类名)
birthday=com.etc.sky.converstor.DateConverstor
6)显示页面 注意 为了能够正常显示 转换后的信息 必须采用struts标签来读取信息
<s:property value="birthday"/>
测试 OK.......