Welcome 微信登录

首页 / 软件开发 / JAVA / 层层递进Struts1(六)自定义转换器

层层递进Struts1(六)自定义转换器2013-12-07 csdn 李达Struts提供的类型转换有限,如果我们强行使用没有的类型转换,则会出现错误,以Date类型为例:

org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet action threw exceptionjava.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>
结果