[ 日期类型转换器 ]

在向数据库中插入一条日期类型的数据时, 报错:

  报错信息说的是java.sql.Date类型数据无法转换, 因为POJO类中该数据类型和数据库对应, 是java.sql.Date类型的, 而如果在jsp页面, 添加信息向数据库中

插入一条记录, 如果日期类型的字段不填, 保持为空, 即null, 就会报出以上的错误, 解决方法:

转换器的使用:

  1. 创建一个转换器类;

  2. 在使用之前注册该转换器.

定义转换器类:

SQLDateConverter.java

package cn.itcast.crm.util;

import org.apache.commons.beanutils.Converter;
import org.apache.commons.lang.StringUtils;

public class SQLDateConverter implements Converter {
	/**
	 * @param type: 要转换的对象的数据类型
	 * @param value: 要转换的数据
	 */
	@SuppressWarnings("rawtypes")
	@Override
	public Object convert(Class type, Object value) {
		if (value == null) {
			return null;
		}
		if (type == null) {
			return null;
		}
		if (type != java.sql.Date.class) {
			return null;
		}
		if (value instanceof String) {
			String str = (String) value;
			if (StringUtils.isNotBlank(str)) {
				return java.sql.Date.valueOf(str);
			}
		}
		return null;
	}
}

在使用该数据之前, 先注册转换器, 把数据类型转换一下再使用就不会报错:

SysUserAction.java

	// 保存用户
	public String save() throws IllegalAccessException, InvocationTargetException {
		// vo-->po
		SysUser sysUser = new SysUser();
		
		// 密码加密
		MD5keyBean md5keyBean = new MD5keyBean();
		String password = md5keyBean.getkeyBeanofStr(sysUserForm.getPassword());
		sysUserForm.setPassword(password);
		
	  // 注册转换器: 日期类型转换器, 防止不输入日期的时候报错
	  ConvertUtils.register(new SQLDateConverter(), java.sql.Date.class);
		
		BeanUtils.copyProperties(sysUser, sysUserForm);
		
		// 补全权限组信息
		SysRole sysRole = new SysRole();
		sysRole.setId(sysUserForm.getRoleId());
		sysUser.setSysRole(sysRole);
		
		// 补全部门信息
		SysUserGroup sysUserGroup = new SysUserGroup();
		if (StringUtils.isNotBlank(sysUserForm.getGroupId())) {
			sysUserGroup.setId(Integer.parseInt(sysUserForm.getGroupId()));
		}
		sysUser.setSysUserGroup(sysUserGroup);		
		
		// 调用service保存
		sysUserService.saveSysUser(sysUser);
		
		return "listAction";
	}

  

 

posted @ 2017-05-28 18:47  半生戎马,共话桑麻、  阅读(311)  评论(0)    收藏  举报
levels of contents