在看struts2的文档的时候,动手尝试了下Type Conversion,但很不幸的是总是出现错误信息,如下:
简单的代码如下:
private SampleObject dataInfo;
//其他代码
}
,
Conversion的代码片段:
- /*
- * Created on 2008-10-10
- */
- package com.chsi.sample.typeconversion;
- import java.text.DateFormat;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.Map;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.apache.struts2.util.StrutsTypeConverter;
- /**
- * 一个简单的数据类型转换实例
- *
- *@author anwx<a href="mailto:XXXXXX@c.com">An Weixiao</a>
- *@version $Id$
- */
- public class SampleTypeConversion extends StrutsTypeConverter{
- private Log log = LogFactory.getLog(SampleTypeConversion.class);
- @Override
- public Object convertFromString(Map context, String[] values, Class toClass) {
- log.info("执行convertFromString: ......");
- if(values == null || values[0] == null)
- return null;
- [color=red]Calendar cal = Calendar.getInstance();[/color] //error: cal = null
- DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
- try {
- Date date = dateFormat.parse(values[0]);
- cal.setTime(date);
- } catch (ParseException e) {
- log.info("TypeConversion 出错啦!!!");
- e.printStackTrace();
- return cal;
- }
- return cal;
- }
- @Override
- public String convertToString(Map context, Object object) {
- log.info("执行convertToString: ......");
- if(object instanceof Calendar){
- StringBuffer buffer= new StringBuffer();
- Calendar o = (Calendar)object;
- buffer.append(o.get(Calendar.YEAR));
- buffer.append("-").append(o.get(Calendar.MONTH) + 1);
- buffer.append("-").append(o.get(Calendar.DATE));
- return buffer.toString();
- } else {
- log.info("非Calendar类型");
- return null;
- }
- }
- /* (non-Javadoc)
- * @see org.apache.struts2.util.StrutsTypeConverter#convertValue(java.util.Map, java.lang.Object, java.lang.Class)
- */
- @Override
- public Object convertValue(Map arg0, Object arg1, Class arg2) {
- return super.convertValue(arg0, arg1, arg2);
- }
- /* (non-Javadoc)
- * @see org.apache.struts2.util.StrutsTypeConverter#performFallbackConversion(java.util.Map, java.lang.Object, java.lang.Class)
- */
- @Override
- protected Object performFallbackConversion(Map arg0, Object arg1, Class arg2) {
- return super.performFallbackConversion(arg0, arg1, arg2);
- }
- }
然后SampleEAction-conversion.properties的文件内容为:
dataInfo.birthday=com.chsi.sample.typeconversion.SampleTypeConversion
这里请注意conversion中红色部分是正确的处理,而错误信息的引起主要是因为cal 为null,因为是个新手哈,还一根筋的认为是conversion的配置出错了呢……,简直是无语……
当然在处理conversion的时候也对date, calendar进行了相关的处理考虑:从struts2提供的文档来看,如果要在页面中显示一个日期格式,可以使用:
关于java.util.Date:
1、<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值