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>
相关文章
相关标签/搜索