Struts2.0框架不能够或者不能完整的进行自动类型转换时采用自定义类型转换
自定义类型转换器
1.开发一个类,extends StrutsTypeConverter
2.配置文件,声明自定义类型转换器
一. 局部的类型转换器:
配置文件的名称: actionName-conversion.properties
配置文件的位置: 和Action放在同一个目录结构当中
配置文件的内容: Action中需要类型转换器的属性=自定义类型转换器的全路径
1.在com.jsu.struts2.action包中写一个类extends StrutsTypeConverter
在DateConverter.java文件中
package com.jsu.struts2.action; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; public class DateConverter extends StrutsTypeConverter { @Override public Object convertFromString(Map context, String[] values, Class toClass) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); Date d = null; String dateStr = values[0];//用户提交的数据 try { d=sdf.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return d; } @Override public String convertToString(Map context, Object obj) { Date d =(Date)obj; SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); String dateStr=sdf.format(d); return dateStr; } }
2.reg.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <center> <form action="add.action" method="post"> userName:<input type="text" name="username"/><br> Age:<input type="text" name="age"/><br> Birthday:<input type="text" name="birthday"/><br> <input type="submit" value="Submit"/> </form> </center> </body> </html>
3.在com.jsu.struts2.action包中写一个Action RegisterAction extends ActionSupport
在RegisterAction.java文件中
package com.jsu.struts2.action; import java.util.Date; import com.opensymphony.xwork2.ActionSupport; public class RegisterAction extends ActionSupport { private String username; private String age; private Date birthday; @Override public String execute() throws Exception { System.out.println(username+" : "+age+" : "+birthday); return SUCCESS; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
4.在和Action同一目录结构当做写配置文件,配置文件命名actionName-conversion.properties
配置文件的内容: Action中需要类型转换器的属性=自定义类型转换器的全路径
在RegisterAction-conversion.properties配置文件中
birthday=com.jsu.struts2.action.DateConverter
5.在struts.xml文件中
<struts> <package name="loginDemo" namespace="/" extends="struts-default"> <action name="add" class="com.jsu.struts2.action.RegisterAction"> <result type="redirect">/reg.jsp</result> </action> </package> </struts>
二、 全局的类型转换器
配置文件的名称: xwork-conversion.properties
配置文件的位置: 在src目录下面
配置文件的内容: 需要进行类型转换的类型=自定义类型转换器的全路径
局部类型转换:只针对某一个Action的某一个属性进行转换
全局类型转换:对所有Action对象中该类型的属性进行转换
在 xwork-conversion.properties配置文件中
java.util.Date=com.jsu.struts2.action.DateConverter
以上其他内容都一样,只改变配置文件