`

Struts2的类型转换器

 
阅读更多

一、概述
   
B/S 应用中,将字符串请求参数转换为相应的数据类型,是MVC 框架提供的功能,而Struts2 是很好的MVC 框架实现者,理所当然,提供了类型转换机制。

    Struts2
的类型转换是基于OGNL 表达式的,只要我们把HTML 输入项(表单元素和其他GET/POET 的参数)命名为合法的OGNL 表达式,就可以充分利用Struts2 的转换机制。

   
除此之外,Struts2 提供了很好的扩展性,开发者可以非常简单的开发自己的类型转换器,完成字符串和自定义复合类型之间的转换。总之,Struts2 的类型转换器提供了非常强大的表现层数据处理机制,开发者可以利用Struts2 的类型转换机制来完成任意的类型转换。

二、实现自定义类型转换器
   
实现TypeCoverter 接口,或者继承DefaultTypeConverter 实现类(该类实现了TypeCoverter 接口),通过继承该实现类来实现自己的类型转换器。重写convertValue 方法即可。

   
为了简化类型转换器的实现,Struts2 提供了一个StrutsTypeConverter 抽象类,这个抽象类是DefaultConverter 的子类。实现了方法,并提供了2 个不同转换方向的方法:Object
convertToString(Map context,String[] values,Class toClass)
String convertFromString(Map context,Object o)

三、注册应用
   
实现了自定义类型转换器之后,将该类型转换器注册在Web 应用中,Struts2 框架才可以正常使用该类型转换器。
关于类型转换器的注册方式,主要有3 中:
A
、注册局部类型转换器:仅仅对某个Action 的属性起作用。
B
、注册全局类型转换器:对所有Action 的特定类型的属性都会生效。
C
、使用JDK1.5 的注释来注册类型转换器:通过注释方式来生成类型转换器。
1
、局部类型转换器
   
提供如下格式的文件
文件名:  ActionName-conversion.properties 
内容:多个propertyName (属性名)= 类型转换器类(含包名),  date=
com.util.converter.DateConverter 
存放位置:和ActionName 类相同路径。

2
、全局类型转换器
   
提供如下格式的文件
文件名:  xwork-conversion.properties
内容:   多个 复合类型=对应类型转换器 项组成,如  java.Util.Date=
com.util.converter.DateConverter 
存放位置:WEB-INF/classes/ 目录下。

四、应用示例
   
由于Struts2 对日期转换显示时,会显示日期和时间,现在项目只需要显示日期,所以采用自定义的类型转换器来实现日期显示。

1
、类型转换类

public class DateConverter extends StrutsTypeConverter {  

  

    private static String DATE_TIME_FOMART_IE = "yyyy-MM-dd HH:mm:ss";     //  匹配 IE 浏览器  

  

    private static String DATE_TIME_FOMART_FF = "yy/MM/dd hh:mm:ss";  //  匹配 Firefox 浏览器  

  

    @Override  

    public Object convertFromString(Map context, String[] values, Class toClass) {  

        Date date = null;  

        String dateString = null;  

        if (values != null && values.length > 0) {  

            dateString = values[0];  

            if (dateString != null) {  

             

                SimpleDateFormat format = new SimpleDateFormat(DATE_FOMART_IE);  

                try {  

                    date = format.parse(dateString);  

                } catch (ParseException e) {  

                    date = null;  

                }  

               

                if (date == null) {  

                    format = new SimpleDateFormat(DATE_FOMART_FF);  

                    try {  

                        date = format.parse(dateString);  

                    } catch (ParseException e) {  

                        date = null;  

                    }  

                }  

            }  

        }  

        return date;  

    }  

  

    @Override  

    public String convertToString(Map context, Object o) {  

    String dateString=null; 

         if(o instanceof Date ){

           Date date = (Date) o;

                SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-ddd"); 

             dateString=format .formate(date);

         } else if(o==null){

              return null;

           }else{

                 o.toString(); 

          }

       return dateString;

    }  

  


2
xwork-conversion.properties 配置文件 java.util.Date=com.util.converter.DateConverter  

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics