层层递进Struts1(六)自定义转换器
2013-07-29 19:56
253 查看
Struts提供的类型转换有限,如果我们强行使用没有的类型转换,则会出现错误,以Date类型为例:
在此我们来建立java.util.Date的转换器。
![](https://img-blog.csdn.net/20130726111449281?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlkYWFza3k=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20130726111811562?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlkYWFza3k=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
更多相关博客,请至《层层递进Struts1(八)之总结》
org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet action threw exception java.lang.IllegalArgumentException: Cannot invoke com.tgb.struts1.TypeCovertActionForm.setUtilDate - argument type mismatch
在此我们来建立java.util.Date的转换器。
Servlet版
Converter
数据转换器,代码如下:package com.tgb.struts1; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.beanutils.ConversionException; import com.sun.org.apache.commons.beanutils.Converter; public class UtilDateConverter implements org.apache.commons.beanutils.Converter { public Object convert(Class type, Object value) { if (value instanceof Date) { return (value); } Date date=null; if (value instanceof String) { try { date=new SimpleDateFormat("yyy-MM-dd").parse((String)value); } catch (Exception e) { e.printStackTrace(); } } return date; } }
Servlet
为的是将上面的转换器注册到ConvertUtils中:package com.tgb.struts1; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import org.apache.commons.beanutils.ConvertUtils; public class UtilServlet extends HttpServlet { public void init()throws ServletException { ConvertUtils.register(new UtilDateConverter(), java.util.Date.class); } }
配置文件
在web.xml中添加配置,因为转换器在Tomcat启动之时就加载,所以此处要将load-on-startup设置为大于0的值:<servlet> <servlet-name>UtilServlet</servlet-name> <servlet-class>com.tgb.struts1.UtilServlet</servlet-class> <load-on-startup>10</load-on-startup> </servlet>
测试
jsp
<h4>测试struts的转换器</h4> <form action="typeconvert.do" method="post" > int value:<input type="text" name="intValue" /> <br/> double value:<input type="text" name="doubleValue" /> <br/> boolean value:<input type="text" name="booleanvVlue" /> <br/> java.sql.date:<input type="text" name="sqlDate" /> <br/> java.util.date:<input type="text" name="utilDate" /> <br/> <input type="submit" value="提交" /> <br/> </form>
结果
plugin版
plugin
package com.tgb.struts1; 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 UtilDateConverterPlugin implements PlugIn { public void destroy() { // TODO Auto-generated method stub } public void init(ActionServlet servlet, ModuleConfig config) throws ServletException { ConvertUtils.register(new UtilDateConverter(), java.util.Date.class); } }
配置文件
在struts-config中放入:<plug-in className="com.tgb.struts1.UtilDateConverterPlugin" />
测试结果
总结
在此体会到面向抽象编程所带来的可扩展的好处,这篇博客中的两个自定义的转换器过程基本一致:实现接口写出转换器、更改配置文件保证可以在Tomat加载即注册。更多相关博客,请至《层层递进Struts1(八)之总结》
相关文章推荐
- 层层递进Struts1(六)自定义转换器
- 自定义struts2.0中的转换器(converter)
- 层层递进Struts1(七)详解DispatchAction
- 基于Struts 2的自定义类型转换器
- struts自定义类型转换器DefaultTypeConverter
- Struts 2读书笔记-----Struts 2的自定义类型转换器
- Struts(二十):自定义类型转换器
- Struts 2读书笔记-----Struts 2的自定义类型转换器
- Struts ActionForm中自定义转换器Converter(简单易懂)
- 层层递进Struts1(八)之总结
- 层层递进Struts1(七)详解DispatchAction
- Struts中的转换器:自定义转换器
- 层层递进Struts1(三)之Struts组成
- Struts 2自定义类型转换器
- 层层递进Struts1(一)之由Servlet引入Struts
- Struts1——自定义转换器
- Struts1——自定义转换器
- 层层递进Struts1(二)之Struts1简介及登录实例
- 层层递进Struts1(四)之预加载ActionServlet
- Struts1—从BeanUtils看struts的实现原理3(自定义BeanUtils的转换器)