当bean中的变量类型没有日期类型(即java.sql.Date或者java.sql.Date),变量类型全为int或者String类型时,所有的bean都可以使用以下的通用方法,没有一点毛病。
import java.lang.reflect.InvocationTargetException;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.beanutils.BeanUtils;
import com.ctcc.dt_telecom.bean.User;
public class WEBUtils{
/**
* 将map类型转换为bean
* @param request
* @param t
* @return
*/
public static <T> T paramToBean(HttpServletRequest request,T t) {
//通过request从服务器获取参数的map集合
Map<String, String[]> map = request.getParameterMap();
try {
//使用BeanUtils.populate 将map转为bean
BeanUtils.populate(t, map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return t;
}
但是,当bean里面有日期类型是,就会出现转换异常的错误,这个让我很难受,查了很多资料。终于找到了方法,也就是我前面发的这篇帖子里面提到的方法。
https://blog.csdn.net/m0_38022029/article/details/81348431
但是上面帖子里面的方法只能将 map中的字符串类型转为 java.util.Date类型。
而oracle数据库中的Date为java.sql.Date,因为Bean 中的类型也为java.sql.Date类型
用以上方法将 String转为 java.sql.Date类型时,虽然不会报错,但是它会让该变量为null ,而且该变量后面的变量也都为null.
所有这个方法不行,
由于开发时间有限,我现在无法再去研究这些问题 ,于是自己想到了一个很土的解决方案。以下方案虽然有效,但是不够通用,会产生很多重复的代码
/**
* 将map转为user
* 思路:
* 1.将前端input 中有关日期的name都改为别名,即在原名前面加1,
* 所以该值在使用BeanUtils.populate(user, map) 转换时就会为null,不会出现问题
* 2. 再用request.getParameter获取未转换的日期类型,用SimpleDateFormat手动将string转为java.util.sql
* 3.使用 new java.sql.Date(long)的方法,将java.util.Date转为ava.sql.Date方法
* 4.再使用BeanUtils.setProperty将其存进user中
*
* @param request
* @param user
* @return
*/
public static User paramToBean(HttpServletRequest request,User user) {
Map<String, String[]> map = request.getParameterMap();
String birthday1=request.getParameter("birthday1");
String hiredate1=request.getParameter("hiredate1");
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
try {
BeanUtils.populate(user, map);
if(birthday1 != null && birthday1 !="") {
Date birthday =new Date(simpleDateFormat.parse(birthday1).getTime());
BeanUtils.setProperty(user, "birthday", birthday);
}
if(hiredate1 !=null && hiredate1 !="") {
Date hiredate =new Date(simpleDateFormat.parse(hiredate1).getTime());
BeanUtils.setProperty(user, "hiredate", hiredate);
}
} catch (Exception e) {
e.printStackTrace();
}
return user;
}
}
各位大神如果有此问题的解决方案,请在文章下面留言。谢谢!!!