• Struts2下关于Calendar,date的一些处理


    在看struts2的文档的时候,动手尝试了下Type Conversion,但很不幸的是总是出现错误信息,如下:

    引用
    ERROR [ParametersInterceptor] ParametersInterceptor - [setParameters]: Unexpected Exception caught setting 'dataInfo.birthday' on 'class com.chsi.sample.action.SampleEAction: Error setting expression 'dataInfo.birthday' with value '[Ljava.lang.String;@13ac14a'


        简单的代码如下:

    引用
    public class SampleEAction extends BasicCRUTSupportAction implements Preparable{
        private SampleObject dataInfo;
        //其他代码
    }

    ,
        Conversion的代码片段:

    Java代码  收藏代码
    1. /* 
    2.  * Created on 2008-10-10 
    3.  */  
    4. package com.chsi.sample.typeconversion;  
    5.   
    6. import java.text.DateFormat;  
    7. import java.text.ParseException;  
    8. import java.text.SimpleDateFormat;  
    9. import java.util.Calendar;  
    10. import java.util.Date;  
    11. import java.util.Map;  
    12.   
    13. import org.apache.commons.logging.Log;  
    14. import org.apache.commons.logging.LogFactory;  
    15. import org.apache.struts2.util.StrutsTypeConverter;  
    16.   
    17. /** 
    18.  * 一个简单的数据类型转换实例 
    19.  *  
    20.  *@author anwx<a href="mailto:XXXXXX@c.com">An Weixiao</a> 
    21.  *@version $Id$ 
    22.  */  
    23. public class SampleTypeConversion extends StrutsTypeConverter{  
    24.     private Log log = LogFactory.getLog(SampleTypeConversion.class);  
    25.     @Override  
    26.     public Object convertFromString(Map context, String[] values, Class toClass) {  
    27.         log.info("执行convertFromString: ......");  
    28.         if(values == null || values[0] == null)  
    29.             return null;  
    30.         [color=red]Calendar cal = Calendar.getInstance();[/color] //error: cal = null  
    31.         DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
    32.         try {  
    33.             Date date = dateFormat.parse(values[0]);  
    34.             cal.setTime(date);  
    35.         } catch (ParseException e) {  
    36.             log.info("TypeConversion 出错啦!!!");  
    37.             e.printStackTrace();  
    38.             return cal;  
    39.         }  
    40.         return cal;  
    41.     }  
    42.   
    43.     @Override  
    44.     public String convertToString(Map context, Object object) {  
    45.         log.info("执行convertToString: ......");  
    46.         if(object instanceof Calendar){  
    47.             StringBuffer buffer= new StringBuffer();  
    48.             Calendar o = (Calendar)object;  
    49.             buffer.append(o.get(Calendar.YEAR));  
    50.             buffer.append("-").append(o.get(Calendar.MONTH) + 1);  
    51.             buffer.append("-").append(o.get(Calendar.DATE));  
    52.             return buffer.toString();  
    53.         } else {  
    54.             log.info("非Calendar类型");  
    55.             return null;  
    56.         }  
    57.     }  
    58.   
    59.     /* (non-Javadoc) 
    60.      * @see org.apache.struts2.util.StrutsTypeConverter#convertValue(java.util.Map, java.lang.Object, java.lang.Class) 
    61.      */  
    62.     @Override  
    63.     public Object convertValue(Map arg0, Object arg1, Class arg2) {  
    64.         return super.convertValue(arg0, arg1, arg2);  
    65.     }  
    66.   
    67.     /* (non-Javadoc) 
    68.      * @see org.apache.struts2.util.StrutsTypeConverter#performFallbackConversion(java.util.Map, java.lang.Object, java.lang.Class) 
    69.      */  
    70.     @Override  
    71.     protected Object performFallbackConversion(Map arg0, Object arg1, Class arg2) {  
    72.         return super.performFallbackConversion(arg0, arg1, arg2);  
    73.     }  
    74. }  



    然后SampleEAction-conversion.properties的文件内容为:
        dataInfo.birthday=com.chsi.sample.typeconversion.SampleTypeConversion

    这里请注意conversion中红色部分是正确的处理,而错误信息的引起主要是因为cal 为null,因为是个新手哈,还一根筋的认为是conversion的配置出错了呢……,简直是无语……
       
        当然在处理conversion的时候也对date, calendar进行了相关的处理考虑:从struts2提供的文档来看,如果要在页面中显示一个日期格式,可以使用:
    关于java.util.Date:
         1、<s:text>

    引用
         <s:text name="format.date"><s:param name="value" value="dataInfo.specialDate"></s:param></s:text>


         2、<s:date>这个更为方便
          <s:date format=""/>
         3、当然我们也可以通过request得到对应的数据然后直接自己动手转化

         如果表单中有需要格式话的date类型,则可以使用:
            <s:textfield key="dataInfo.specialDate" value="%{getText('format.date',{dataInfo.specialDate})}" />
         其中的formate.date来自属性文件, 这里需要注意的是我们在写属性的时候'='两边不要有空格,否则<input value="">中将会出现空格哈
          这里还要注意的一点就是getText的第二个参数不要用引号!!!,这个是struts2文档中的一个错误……,也无语,险些害我为此而整个conversion来处理java.util.date类型,

    关于java.util.Calendar:
        这个属性需要使用conversion来完成转化,只要实现了conversion其他的问题就是date和calendar之间的转化了……,在页面中我们可以通过它的属性time来得到date数据,然后的处理方法就和date一样了.
        value="dataInfo.mc.time" 就得到了Calendar类型的date值

  • 相关阅读:
    (整理)SQLServer_DBA 工具
    (转)winform Form 淡入淡出效果
    (转)SQLServer_T-SQL 语句执行时间的查询
    (整理)IIS 7 503 "service unavailable" errors
    (转载)C#中使用GUID
    (转载)SQL Server 2005 如何启用xp_cmdshell组件
    设计模式之适配器
    jaxb 组装及解析xml
    springMvc 简单搭建
    设计模式之工厂模式
  • 原文地址:https://www.cnblogs.com/heye/p/2725309.html
Copyright © 2020-2023  润新知