Struts PlugIn 特性:java
(1). 应用程序在启动时会调用 init() 方法执行初始化操做,在中止应用程序时会调用 destroy() 方法执行清理工做。apache
(2). 在调用 init() 方法前使用 setter 方法将 <set-property /> 配置设置到变量中。ide
采用 PlugIn 方式实现数据转换器:this
在使用Struts开发的应用中,当请求转交到Action时,若是有关联这个Action的ActionForm,Struts会用请求参数填充ActionForm里相应的字段。因为ActionForm字段的数据类型是在应用运行前写死的,请求参数是在应用运行后才能肯定的,因此它们之间存在数据类型转换的问题。spa
Struts 将数据类型转换器放置于一个静态的变量中,全部数据类型转换器只需注册一次便可。code
import org.apache.commons.beanutils.ConversionException; import org.apache.commons.beanutils.Converter; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateConverter implements Converter { private final String[] pattern; public DateConverter(String[] pattern) { this.pattern = pattern; } public Object convert(Class clazz, Object o) { DateFormat format = null; Date date = null; if (o instanceof Date) { return (Date) o; } if (o instanceof String && ((String) o).trim().length() > 0) { for (int i = 0; i < pattern.length; i++) { format = new SimpleDateFormat(pattern[i]); try { return format.parse(String.valueOf(o)); } catch (ParseException e) { } } } if (date == null) { throw new ConversionException("Parameter invalid: \"" + o + "\""); } else { return date; } } }
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 javax.servlet.ServletException; import java.util.Date; public class ConverterPlugin implements PlugIn { private String[] datePattern; // struts 使用 setter 注入 property 参数 public void setDatePattern(String[] pattern) { this.datePattern = pattern; } @Override public void init(ActionServlet actionServlet, ModuleConfig moduleConfig) throws ServletException { // 注册 Date 转换器 ConvertUtils.register(new DateConverter(datePattern), Date.class); } @Override public void destroy() { } }
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <plug-in className="ConverterPlugin"> <!--多个 value 使用“,”分开--> <set-property property="datePattern" value="yyyy/MM/dd,yyyy-MM-dd"/> </plug-in> </struts-config>