层层递进Struts1(六)自定义转换器

     Struts提供的类型转换有限,如果我们强行使用没有的类型转换,则会出现错误,以Date类型为例:

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>

 

    结果

 

    层层递进Struts1(六)自定义转换器

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" />

 

    测试结果

 

    层层递进Struts1(六)自定义转换器

总结

    在此体会到面向抽象编程所带来的可扩展的好处,这篇博客中的两个自定义的转换器过程基本一致:实现接口写出转换器、更改配置文件保证可以在Tomat加载即注册。

    更多相关博客,请至《层层递进Struts1(八)之总结》



 

你可能感兴趣的:(struts1)