提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
Struts的ActionServlet接收用户在浏览器发送的请求,并将用户输入的数据,按照FormBean中定义的数据类型,赋值给FormBean中每个变量,赋值的过程是struts提供的基本数据(int,double,boolean,string,java.sql.Date等)类型转换器完成的,有些数据的类型转换,例如画面上输入的日期格式的字符串,赋值给java.util.Date类型的变量,这种情况,struts就没有给我们提供转换器,这就需要我们自定义转换器,来处理,下面我们就一起学习,怎样编写自定义转换器,以及将自定义转换器注册到struts的两种方式。
自定义转换器
首先我们自定义一个转换器
方法:实现org.apache.commons.beanutils.Converter接口
重写convert方法,来完成日期格式的字符串,转换成java.util.Date类型。
自定义转换器java代码如下:
package xxx.xxx.converter;import java.text.SimpleDateFormat;
import java.util.Date;import org.apache.commons.beanutils.Converter;public class UtilDateConverter implements Converter {@Overridepublic Object convert(Class type, Object value) {if (value instanceof Date) {return value;}Date date = null;if (value instanceof String) {try {date = new SimpleDateFormat("yyyy-MM-dd").parse((String) value);} catch (Exception e) {e.printStackTrace();}}return date;}}
注册到struts中
将自定义转换器注册到struts中,有两种方法
- 通过Servlet注册
自定义Servlet类
方法:继承javax.servlet.http.HttpServlet类,重写init方法,通过ConvertUtils.register方法将我们自定义转换器注册到ConvertUtils类。
struts为我们提供的所有数据类型转换器都注册在ConvertUtils类里
自定义Servlet代码如下(示例):
import java.util.Date;import javax.servlet.http.HttpServlet;import org.apache.commons.beanutils.ConvertUtils;import xxx.xxx.converter.UtilDateConverter;public class UtilDateConverterServlet extends HttpServlet {@Overridepublic void init() {ConvertUtils.register(new UtilDateConverter(), Date.class);}}
再将自定义的Sevlet类,通过web.xml,交给struts管理
web.xml文件代码如下:
<servlet><servlet-name>UtilDateConverterServlet</servlet-name><servlet-class>xxx.xxx.servlet.UtilDateConverterServlet</servlet-class><load-on-startup>10</load-on-startup></servlet>
- 通过PlugIn注册
自定义PlugIn 类
方法:实现org.apache.struts.action.PlugIn接口,重写init方法,同样通过ConvertUtils.register方法将我们自定义转换器注册到ConvertUtils类
自定义PlugIn代码如下(示例):
package xxx.xxx.plugin;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;import xxx.xxx.converter.UtilDateConverter;public class UtilDateConverterPlugIn implements PlugIn {@Overridepublic void destroy() {}public void init(ActionServlet servlet, ModuleConfig config) throws ServletException {ConvertUtils.register(new UtilDateConverter(), Date.class);}
}
再将自定义的PlugIn类,通过struts-config.xml的plug-in标签,交给struts管理
struts-config.xml文件代码如下:
</struts-config>中间略<plug-in className="xxx.xxx.plugin.UtilDateConverterPlugIn"/>中间略
</struts-config>
到这里,我们就完成了,日期格式的字符串类型,转换成java.util.Date类型的示例
我们启动tomcat,运行一下,看看效果
java.util.Date的输入及显示,就是我们自定义转换器来完成的
运行效果
总结
struts1的自定义转换器讲解到这里,欢迎留言交流,下篇见。