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>