转换器也是可以扩展的,在表单中,输入的都是字符串,使用转换器,可以自动转换成其他类型
1、index.jsp页面

Code
<li>测试ActionForm类型转换器</li><br>
<form action="typeconvert.do" method="post">
自动转换成int(intValue):<input type="text" name="intValue"><br>
自动转换成double(doubleValue):<input type="text" name="doubleValue"><br>
自动转换成boolean(booleanValue):<input type="text" name="booleanValue"><br>
自动转换成java.sql.date(java.sql.Date):<input type="text" name="sqlDate"><br>
(自定义的java.util.date类型)java.util.Date:<input type="text" name="utilDate"><br>
<input type="submit" value="提交">
</form>
2、自定义的java.util.date类型,见后面第6点的讲解
3、对应的ActionFrom类为TypeConvertActionForm.java

Code
package com.bjsxt.struts;
import org.apache.struts.action.ActionForm;
/**
* struts中的类型转换测试
* @author Administrator
*
*/
public class TypeConvertActionForm extends ActionForm {
private int intValue;
private double doubleValue;
private boolean booleanValue;
private java.sql.Date sqlDate;
private java.util.Date utilDate;
public int getIntValue() {
return intValue;
}
public void setIntValue(int intValue) {
this.intValue = intValue;
}
public double getDoubleValue() {
return doubleValue;
}
public void setDoubleValue(double doubleValue) {
this.doubleValue = doubleValue;
}
public boolean isBooleanValue() {
return booleanValue;
}
public void setBooleanValue(boolean booleanValue) {
this.booleanValue = booleanValue;
}
public java.sql.Date getSqlDate() {
return sqlDate;
}
public void setSqlDate(java.sql.Date sqlDate) {
this.sqlDate = sqlDate;
}
public java.util.Date getUtilDate() {
return utilDate;
}
public void setUtilDate(java.util.Date utilDate) {
this.utilDate = utilDate;
}
}
4、对应的Action类为--TypeConvertTestAction.java

Code
package com.bjsxt.struts;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* struts中的类型转换测试
* @author Administrator
*
*/
public class TypeConvertTestAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
return mapping.findForward("success");
}
}
5、typeconvert_succes.jsp

Code
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
intValue:${typeconvertForm.intValue }<br>
doubleValue:${typeconvertForm.doubleValue }<br>
booleanValue:${typeconvertForm.booleanValue }<br>
java.sql.dateValue:${typeconvertForm.sqlDate }<br>
java.util.utilValue:${typeconvertForm.utilDate }<br>
</body>
</html>6、自定义的java.util.date类型---对应UtilDateConverter.java类,然后使用进行初始化,方法有二种:
-----UtilDateConverter.java类

Code
package com.bjsxt.struts;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.Converter;
/**
* java.util.Date类型转换器
* @author Administrator
*
*/
public class UtilDateConverter implements Converter {
public Object convert(Class type, Object value) {
System.out.println("UtilDateConverter.value=" + value);
if (value == null) {
return value;
}
if (value instanceof Date) {
return value;
}
Date d = null;
if (value instanceof String) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
d = sdf.parse((String)value);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return d;
}
}
·方法1、使用servlet来初始化(UtilDateConverterInitWithServlet.java类)--最后在web.xml中配置serlvet,在启动的时候初始化 <load-on-startup>
-----UtilDateConverterInitWithServlet.java类

Code
package com.bjsxt.struts;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.commons.beanutils.ConvertUtils;
/**
* 注册java.util.date转换器
* @author Administrator
*
*/
public class UtilDateConverterInitWithServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("UtilDateConverterInitWithServlet.init()");
ConvertUtils.register(new UtilDateConverter(), Date.class);
}
}
-----在web.xml中配置serlvet,在启动的时候初始化 <load-on-startup>

Code
<servlet>
<servlet-name>UtilDateConverterInitWithServlet</servlet-name>
<servlet-class>com.bjsxt.struts.UtilDateConverterInitWithServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet> ·方法2、 使用plug-in来初始化(UtilDateConverterInitWithPlugIn.java)--,最后在web.xml种配置<plug-in className="....."
-----UtilDateConverterInitWithPlugIn.java类

Code
package com.bjsxt.struts;
import java.util.Date;
import javax.servlet.ServletException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
public class UtilDateConverterInitWithPlugin implements PlugIn {
public void destroy() {
}
public void init(ActionServlet servlet, ModuleConfig config)
throws ServletException {
System.out.println("UtilDateConverterInitWithPlugin.init()");
ConvertUtils.register(new UtilDateConverter(), Date.class);
}
}
-----在web.xml中配置的plug-in,plug-in放在文件的最后
<plug-in className="com.bjsxt.struts.UtilDateConverterInitWithPlugin"/>