struts2类型转换器

具体来说,整个过程可以分为两个步骤:
1.实现TypeCoverter接口,或者继承DefaultTypeConverter实现类(该类实现了TypeCoverter接口),通过继承该实现类来实现自己的类型转换器。重写convertValue方法即可。为了简化类型转换器的实现,Struts2提供了一个StrutsTypeConverter抽象类,这个抽象类是DefaultConverter的子类
2.给需要进行转换的类或属性指定类型转换器

根据作用域的不同可以将配置文件分为两种:类级别和全局级别。
A、注册局部类型转换器:仅仅对某个Action的属性起作用。
B、注册全局类型转换器:对所有Action的特定类型的属性都会生效。

类级别时,左边是类中需进行类型转换的属性的名称;全局级别时,左边是需进行类型转化的类型的全名。


局部类型转换配置文件遵循如下的命名规则: ClassName-conversion.properties
内容类似:Notice.createtime=com.NoticeConverter

全局类型转换器 xwork-conversion.properties
java.util.Date=com.DateConverter

org.apache.struts.action2.util.StrutsTypeConverter,它能帮助我们方便的编写一个类型转换器。这个类提供了两个抽象方法,以便我们将目标类型转换为String或者将String转换为目标类型。这两个方法是convertFromString和convertToString


public class NoticeConverter extends StrutsTypeConverter {
    private static final Log logger = LogFactory.getLog(NoticeConverter.class);
    
    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
    
    public static final String[] ACCEPT_DATE_FORMATS = {
        "yyyy-MM-dd HH:mm:ss",
        DEFAULT_DATE_FORMAT
    };

    public OeBaseNoticeConverter() {
    }

    @SuppressWarnings("unchecked")
    public Object convertFromString(Map context, String[] values, Class toClass) {
        if(logger.isDebugEnabled()){
            logger.debug("converFromString....");
            if(values!=null){
                logger.debug("convert from  :" + values[0]);
            }
        }
        if (values[0] == null || values[0].trim().equals(""))
            return null;
        
        String dateStr=values[0];
        dateStr=dateStr.replace("T", " ");
        try{
            return DateUtils.parseDate(dateStr, ACCEPT_DATE_FORMATS);
        }catch(Exception ex){
            logger.debug("parse date error:"+ex.getMessage());
        }

        return null;
    }

    @SuppressWarnings("unchecked")
    public String convertToString(Map context, Object o) {
        if (o instanceof Date) {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            try {
                return format.format((Date) o);
            } catch (RuntimeException e) {
                logger.error(e.getMessage());
                return "";
            }
        }
        return "";
    }
}

你可能感兴趣的:(局部,全局,类型转换器)