在struts1.x中设置对java.util.Date类型支持

来源:互联网 发布:mac粉底液色号怎么选 编辑:程序博客网 时间:2024/06/10 04:36

由于Struts的支持包commons-beanutils.jar里面的转换器并不支持java.util.Date类型(但是支持java.sql.Date、java.sql.Time、java.sql.Timestamp类型),所以我们需要通过编程来处理此问题。

1、编写转换类

package cn.steven.web.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.apache.commons.beanutils.Converter;
public class DateConverter implements Converter {
    private static SimpleDateFormat df = new SimpleDateFormat();
    private static Set<String> patterns = new HashSet<String>();
    static {
       DateConverter.patterns.add("yyyy-M-d");
       DateConverter.patterns.add("yyyy-M-d H:m");
       DateConverter.patterns.add("yyyy-M-d H:m:s");
       DateConverter.patterns.add("yyyy-M-d H:m:s.S");
    }
    public Object convert(Class type, Object value) {
 
       if (value == null) {
 
           // 如果为空,返回
 
           return null;
       } else if (value instanceof String) {
           Object dateObj = null;
           Iterator it = patterns.iterator();
           while (it.hasNext()) {
              try {
                  String pattern = (String) it.next();
                  df.applyPattern(pattern);
                  dateObj = df.parse((String) value);
                  break;
              } catch (ParseException ex) {
                  // 不做处理继续下一次迭代
              }
           }
           return dateObj;
       } else {// 如果类型不是字符串,不转换
           System.out.println("Date format is error!");
           return null;
       }
    }
}

2、编写插件类

package cn.steven.web.util;
import javax.servlet.ServletException;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
public class DateConverterPlugin implements PlugIn {
    public void destroy() {
       // 把注册移除
       ConvertUtils.deregister();
    }
    public void init(ActionServlet arg0, ModuleConfig arg1)
           throws ServletException {
       // 注册轮换器
       ConvertUtils.register(new DateConverter(), java.util.Date.class);
    }
}

3、注册插件(在struts配置文件中设置)

<plug-in className="cn.steven.web.util.DateConverterPlugin" />

4、应用代码示例(两种方法任选)

<html:form action="/actionpathname">
日期类型 : <input name="date"
              value="<fmt:formatDate value='${dForm.date}' pattern='yyyy-MM-dd HH:mm:ss.SSS' />" />
</html:form>
-----------------------------------------------------------------------------------------------------
<html:form action="/d">
日期类型 : <input name="date"
              value="<bean:write name='dForm' property='date'
format='yyyy-MM-dd HH:mm:ss.SSS' />" />
</html:form>

祝大家使用愉快!