struts2之日期类型转换

一,概述

struts2中默认会对1995-07-08这种日期类型的数据进行类型转换,转换为Date类型,但是有时用户在jsp页面提交表单时提交的是19950708、1995年07月08日这种类型的话,那么就会转换出错。解决方法当然就是自定义类型转换器了。

二,自定义局部类型转换器

1)注册页面提交数据
<form action="${pageContext.request.contextPath }/user_register" method="post">
    	用户名:<input type="text" name="user.username"/><br/>
    	密码:<input type="password" name="user.pwd"/><br/>
    	年龄:<input type="text" name="user.age"/><br/>
    	生日<input type="text" name="user.birth"/><br/>
    	<input type="submit" value="注册"/><br/>
    </form>
2)对应的JavaBean
package com.bighuan.d_type;

import java.util.Date;

public class User {

	private String username;
	private String pwd;
	private int age;
	private Date birth;

	public User() {

	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public int getAge() {
		return age;
	}

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

	public Date getBirth() {
		return birth;
	}

	public void setBirth(Date birth) {
		this.birth = birth;
	}

}

3)acting类
package com.bighuan.d_type;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{

	
	private User user;
	
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}



	public String register(){
		System.out.println(user.getUsername());
		System.out.println(user.getPwd());
		System.out.println(user.getAge());
		System.out.println(user.getBirth());
		
		return SUCCESS;
	}
	
}
4)配置action,使用的是全局配置,注册成功跳转到index.jsp.
<package name="type" extends="struts-default">
		<global-results>
			<result name="success">/index.jsp</result>
		</global-results>

		<action name="user_*" class="com.bighuan.d_type.UserAction"
			method="{1}">
		</action>

	</package>
5)自定义转换器类,要继承StrutsTypeConverter类.
package com.bighuan.d_type;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;
import org.omg.CORBA.StructMemberHelper;


/**
 * 自定义类型转换器
 * @author bighuan
 *
 */
public class MyConverter extends StrutsTypeConverter {
	// 新需求: 要求项目中要支持的格式,如: yyyy-MM-dd/yyyyMMdd/yyyy年MM月dd日..

		// 先定义项目中支持的转换的格式
		DateFormat[] df = { new SimpleDateFormat("yyyy-MM-dd"),
				new SimpleDateFormat("yyyyMMdd"),
				new SimpleDateFormat("yyyy年MM月dd日") };
	/**
	 * 把String转换为指定的类型 【String To Date】
	 * 
	 * @param context
	 *            当前上下文环境
	 * @param values
	 *            jsp表单提交的字符串的值
	 * @param toClass
	 *            要转换为的目标类型
	 */
	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		// 判断: 内容不能为空
		if(values.length== 0 || values == null){
			return null;
		}
		// 判断类型必须为Date
		if(Date.class != toClass){
			return null;
		}
		
		// 迭代:转换失败继续下一个格式的转换; 转换成功就直接返回
				for (int i=0; i<df.length; i++) {
					try {
						return df[i].parse(values[0]);
					} catch (Exception e) {
						continue;
					}
				}
		return null;
	}

	@Override
	public String convertToString(Map arg0, Object arg1) {
		// TODO Auto-generated method stub
		return null;
	}

}

6)配置局部转换器,命名格式为:Action名称-conversion.properties.Action就是为那个Action类准备转换器的那个Action的名字.当前转换器的名字为UserAction-conversion.properties,
里面的内容为:
user.birth=com.bighuan.d_type.MyConverter
需要注意的是,转换器必须和目标转换器类(UserAction)在同一个包下,转换器的命名格式是有一定规则的,必须是Action名称-conversion.properties.

三,自定义全局类型转换器

1)上面那种方式只对UserAction有效,如果其他的Action也要进行类型转换的话,还要写过一个局部类型转换器.但是使用全局类型转换器就只要配置一个即可.
2)在src目录下,新建一个xwork-conversion.properties,名称固定哦,就是这个名字.properties文件内容为:
java.util.Date=com.bighuan.d_type.MyConverter
这样一个全局类型转换器就完成了.






  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值