基于Converter解决Struts无法处理日期类型的问题

本文介绍在Struts框架中如何处理日期数据,通过自定义日期转换器实现表单中日期字段的有效解析。具体包括创建日期转换器类、在ActionForm中注册转换器及配置表单页面。

基于Struts做应用程序开发的时候,对日期数据的处理,这个是最常见的,由于Struts默认是不支持自动将网页POST的数据自动转化成Date型数据,所以,很多程序员就直接在ActionForm当中直接使用String,然后在Action当中再进行字符串跟日期数据的处理。
那假如在ActionForm当中是使用Date类型呢?会出现什么问题?能用什么样的解决办法?我们先看一下在ActionForm当中会出现的问题先。
首先,创建一个日期转换器类DateConverter.java,该类代码如下:

 

package zizz.struts;

import java.text.SimpleDateFormat;
import org.apache.commons.beanutils.Converter;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
import java.text.ParseException;

/**
*
* 日期转换对象,使用该转换器,在BaseForm当中做一下注册,系统自动地帮助字符的日期表示转换为java.util.Date对象.
* @author zizz.
* Create Time:2006-9-11 19:11:47.
*/

public class DateConverter implements Converter {
    
/**
     * 日期格式化对象.
     */

    private static SimpleDateFormat df = new SimpleDateFormat();
    
    
/**
     * 模式集合.
     */

    private static Set<String> patterns = new HashSet<String>();
    //注册一下日期的转换格式
    static{
        DateConverter.patterns.add("yyyy-MM-dd");
        DateConverter.patterns.add("yyyy-MM-dd HH:mm");
        DateConverter.patterns.add("yyyy-MM-dd HH:mm:ss");
        DateConverter.patterns.add("yyyy/MM/dd HH:mm:ss");
    }
    
    
/**
     * 日期转换器.
     * @param type Class
     * @param value Object
     * return Date Object.
     */

    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){
                    //do iterator continue
                }
            }
            return dateObj;
        }else{
            return null;
        }
    }
}

 

注册日期转换器

自定义的日期转换工作必须先做注册才能使用,注册我们可以将其放在ActionForm当中。
使用以下代码进行注册:
ConvertUtils.register(new DateConverter(), Date.class);
进行注册

 

package zizz .struts ;

import java .util .Date ;

import org .apache .struts .action .ActionForm ;
import org .apache .commons .beanutils .ConvertUtils ;

/**
* UserForm对应着提交页面的网页表单信息
* @author chen yuzhe
*
*/

public class UserForm extends ActionForm {
    
     static {
        ConvertUtils . register ( new DateConverter ( ) , Date . class ) ;
     }

     /**
     * serialVersionUID
     */

     private static final long serialVersionUID = -742922986494711669L ;

     private int id ;
    
     private String name ;
    
     private int age ;
    
     private String loginId ;
    
     private Date birthday ;

     public int getAge ( ) {
         return age ;
     }

     public void setAge ( int age ) {
         this .age = age ;
     }

     public Date getBirthday ( ) {
         return birthday ;
     }

     public void setBirthday (Date birthday ) {
         this .birthday = birthday ;
     }

     public int getId ( ) {
         return id ;
     }

     public void setId ( int id ) {
         this .id = id ;
     }

     public String getLoginId ( ) {
         return loginId ;
     }

     public void setLoginId (String loginId ) {
         this .loginId = loginId ;
     }

     public String getName ( ) {
         return name ;
     }

     public void setName (String name ) {
         this .name = name ;
     }
    
}

 

 

编写user_form.jsp的表单页面,user_form.jsp的代码如下

<%@ page contentType = "text/html; charset=GBK"% >
<%@ taglib uri = "http://struts.apache.org/tags-html" prefix = "html" % >
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
<html >
<head >
<meta http-equiv = "Content-Type" content = "text/html; charset=GBK" >
<title >用户信息表单 < /title >
< /head >
<body >
     <div > <strong >创建新用户 < /strong > < /div >
     <html:form action = "/userSave" >
         <table width = "50%" border = "1" >
             <tr >
                 <td >编号 < /td >
                 <td > <html:text property = "id" / > < /td >
             < /tr >            
             <tr >
                 <td >姓名 < /td >
                 <td > <html:text property = "name" / > < /td >
             < /tr >            
             <tr >
                 <td >登录号 < /td >
                 <td > <html:text property = "loginId" / > < /td >
             < /tr >    
             <tr >
                 <td >年龄 < /td >
                 <td > <html:text property = "age" / > < /td >
             < /tr >                    
             <tr >
                 <td >生日 < /td >
                 <td > <html:text property = "birthday" / > < /td >
             < /tr >            
         < /table >
         <hr >
         <html:submit > < /html:submit >
         <html:reset > < /html:reset >
     < /html:form >

< /body >
< /html >


 

配置struts-config.xml文件,struts-config.xml文件配置如下:

 

< ?xml version = "1.0" encoding = "UTF-8" ? >
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd" >

<struts-config >
   <data-sources / >
   <form-beans >
       <form-bean name = "userForm" type = "zizz.struts.UserForm" > < /form-bean >
   < /form-beans >
   <global-exceptions / >
   <global-forwards / >
   <action-mappings >
       <action path = "/userSave" name = "userForm" validate = "false" scope = "request" type = "zizz.struts.UserSaveAction" > < /action >
   < /action-mappings >
   <message-resources parameter = "zizz.struts.ApplicationResources" / >
< /struts-config >

转载于:https://www.cnblogs.com/lixin19890127/archive/2008/12/30/1365622.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值