struts 1.3.10 之 PlugIn 應用

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>
相關文章
相關標籤/搜索