OGNL 类型转换器

文章目录

内置转换器

对于大部分常用类型,都是通过Struts 2框架内部的内心转换器完成的。这些内置的类型转换器有很多种,用于实现字符串类型和常用类型之间的转换,具体的转换器种类包括:
1. String :将int、long、double、boolean、String类型的数组或者java.util.Date类型转换为字符串。
2. boolean/Boolean :在字符串和布尔值之间进行转换。
3. char/Character :在字符串和字符之间进行转换
4. int/Integer、float/Float、long/Long、double/Double :在字符串和数值型数据之间进行转换。
5. Date :在字符串和日期类型之间进行转换。具体输入/输出格式与当前的Local相干。
6. 数组和集合 :在字符串数组和数组对象、集合对象之间进行转换。

前台输出时间类型(format规定时间日期的格式):

<s:date name="timeDate" format="yyyy-MM-dd" />


### 自定义转换器
#### 创建自定义类型转换器
Struts 2 提供乐一个开发人员编写自定义类型转换器时可以使用的基类:`org.apache.struts2.util.StrutsTypeConverter` StrutsTypeConverter 类是抽象类,定义了两个抽象方法,用于不同的转换方向,分别如下:

`public Object convertFromString(Map arg0, String[] arg1, Class arg2)` :将一个或多个字符串值转换为指定的类型。Map参数是表示OGNL上下文的MAP对象,String数组参数是要转换的字符串值,Class参数是要转换的目标类型。#将一个或多个字符串值转换为指定的类型

`public String convertToString(Map arg0, Object arg1)` :将指定对象转化为字符串。Map参数是表示OGNL上下文的Map对象,Object参数是要转换的对象。#将指定的对象转化为字符串

```java
public class DateConverter extends StrutsTypeConverter{
    private final DateFormat[] dfs = {
            new SimpleDateFormat("yyyy年MM月dd日"),
            new SimpleDateFormat("yyyy-MM-dd"),
            new SimpleDateFormat("MM/dd/yy"),
            new SimpleDateFormat("yyyy.MM.dd"),
            new SimpleDateFormat("yyyyMMdd"),
            new SimpleDateFormat("yyyy/MM/dd")
    };
    @Override
    public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
        String dateStr = arg1[0];
        System.out.println("进来");
        for(DateFormat df:dfs) {
            try {
                return df.parse(dateStr);
            } catch (Exception e) {
                continue;
            }   

        }
        throw new TypeConversionException("转换错误");
    }


    @Override
    public String convertToString(Map arg0, Object arg1) {
        Date date = (Date)arg1;
        return new SimpleDateFormat("yyyy.MM.dd").format(date);
    }

}

配置自定义类型转换器

自定义类型转换器后,还必须进行配置,将类型转换器和某个类或属性通过properties文件建立关联。Struts 2 提供了两种方式来配置转换器,一种是应用于全局范围的类型转换器,一种是应用于特定类的类型转换器。
全局
需要在src目录创建一个名为 xwork-conversion.properties 的属性文件,其内容为:
转换类全名=类型转换器类全名 : java.util.Date=converter.DateConverter
特定类
需要在特定类相同目录下创建一个名为 ClassName-conversion.properties 的属性文件(ClassName代表实际的类名),其内容为:特定类的属性名=类型转换器类全名

原文链接:,转发请注明来源!

发表评论