當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;
}
}
各位大神如果有此問題的解決方案,請在文章下面留言。謝謝!!!