表單請求傳遞的數據,格式爲如下格式的日期時間數據。html
(1):yyyy-MM-dd hh:mm:ssjava
(2):yyyy-MM-ddweb
執行方法能夠使用Date類型接收。數組
1.得到表單字符串。判斷是否符合Date的格式。使用DataFormat轉成成Date。session
1.原來數據綁定的代碼都堆在ControllerRelolver,這樣致使ControllerRelolver臃腫了。因此建立一個DataBind數據綁定類,將數據綁定的代碼移進裏面。mvc
1 package ioc.webmvc.impl; 2 3 import java.lang.reflect.Parameter; 4 import java.text.ParseException; 5 import java.text.SimpleDateFormat; 6 import java.util.Date; 7 8 import javax.servlet.ServletContext; 9 import javax.servlet.ServletRequest; 10 import javax.servlet.ServletResponse; 11 import javax.servlet.http.HttpServletRequest; 12 import javax.servlet.http.HttpServletResponse; 13 import javax.servlet.http.HttpSession; 14 15 import ioc.webmvc.annotation.Param; 16 17 public class DataBind { 18 /** 19 * 綁定做用域對象 20 * @param typeClass 21 * @param request 22 * @param response 23 * @param session 24 * @param application 25 * @return 26 */ 27 public static Object bindScope(Class<?> typeClass, HttpServletRequest request, HttpServletResponse response, 28 HttpSession session, ServletContext application) { 29 if (ServletRequest.class.isAssignableFrom(typeClass)) { 30 return request; 31 } else if (ServletResponse.class.isAssignableFrom(typeClass)) { 32 return response; 33 } else if (HttpSession.class.isAssignableFrom(typeClass)) { 34 return session; 35 } else if (ServletContext.class.isAssignableFrom(typeClass)) { 36 return application; 37 } 38 return null; 39 } 40 41 /** 42 * 綁定基礎數據類型 43 * 44 * @param typeClass 45 * @param parameter 46 * @param request 47 * @return 48 */ 49 public static Object bindBasicData(Class<?> typeClass, Parameter parameter, HttpServletRequest request) { 50 Param param = parameter.getAnnotation(Param.class); 51 if (param == null) { 52 throw new RuntimeException("自定義參數沒有使用@Param註解綁定"); 53 } 54 System.out.println(param.value()); 55 // 得到參數值 56 String parameterValue = request.getParameter(param.value()); 57 58 if (String.class.isAssignableFrom(typeClass)) { 59 // 4.判斷基礎數據類型的String類型 60 return request.getParameter(param.value()); 61 } else if (Long.class.isAssignableFrom(typeClass)) { 62 // 5.判斷基礎數據類型的Long類型 63 if (parameterValue != null && !"".equals(parameterValue)) { 64 return Long.valueOf(parameterValue); 65 } 66 67 } else if (Integer.class.isAssignableFrom(typeClass)) { 68 // 6.判斷基礎數據類型的Integer類型 69 if (parameterValue != null && !"".equals(parameterValue)) { 70 return Integer.valueOf(parameterValue); 71 } 72 73 } else if (Double.class.isAssignableFrom(typeClass)) { 74 // 7.判斷基礎數據類型的Double類型 75 if (parameterValue != null && !"".equals(parameterValue)) { 76 return Double.valueOf(parameterValue); 77 } 78 79 } else if (Float.class.isAssignableFrom(typeClass)) { 80 // 8.判斷基礎數據類型的Float類型 81 if (parameterValue != null && !"".equals(parameterValue)) { 82 return Float.valueOf(parameterValue); 83 } 84 85 } else if (Boolean.class.isAssignableFrom(typeClass)) { 86 // 9.判斷基礎數據類型的Boolean類型 87 if (parameterValue != null && !"".equals(parameterValue)) { 88 return Boolean.valueOf(parameterValue); 89 } 90 91 } else if (Character.class.isAssignableFrom(typeClass)) { 92 // 10.判斷基礎數據類型的Character類型 93 if (parameterValue != null && !"".equals(parameterValue)) { 94 String s = new String(parameterValue); 95 return s.toCharArray()[0]; 96 } 97 98 } else if (Short.class.isAssignableFrom(typeClass)) { 99 // 11.判斷基礎數據類型的Short類型 100 if (parameterValue != null && !"".equals(parameterValue)) { 101 return Short.valueOf(parameterValue); 102 } 103 104 } else if (Byte.class.isAssignableFrom(typeClass)) { 105 // 12.判斷基礎數據類型的Byte類型 106 if (parameterValue != null && !"".equals(parameterValue)) { 107 return Byte.valueOf(parameterValue); 108 } 109 } else if (long.class.isAssignableFrom(typeClass)) { 110 // 5.判斷基礎數據類型的long類型 111 if (parameterValue != null && !"".equals(parameterValue)) { 112 return Long.valueOf(parameterValue); 113 } else { 114 return 0; 115 } 116 117 } else if (int.class.isAssignableFrom(typeClass)) { 118 // 6.判斷基礎數據類型的int類型 119 if (parameterValue != null && !"".equals(parameterValue)) { 120 return Integer.valueOf(parameterValue); 121 } else { 122 return 0; 123 } 124 125 } else if (double.class.isAssignableFrom(typeClass)) { 126 // 7.判斷基礎數據類型的double類型 127 if (parameterValue != null && !"".equals(parameterValue)) { 128 return Double.valueOf(parameterValue); 129 } else { 130 return 0.0; 131 } 132 133 } else if (float.class.isAssignableFrom(typeClass)) { 134 // 8.判斷基礎數據類型的float類型 135 if (parameterValue != null && !"".equals(parameterValue)) { 136 return Float.valueOf(parameterValue); 137 } else { 138 return 0.0f; 139 } 140 141 } else if (boolean.class.isAssignableFrom(typeClass)) { 142 // 9.判斷基礎數據類型的boolean類型 143 if (parameterValue != null && !"".equals(parameterValue)) { 144 return Boolean.valueOf(parameterValue); 145 } else { 146 return true; 147 } 148 149 } else if (char.class.isAssignableFrom(typeClass)) { 150 151 // 10.判斷基礎數據類型的char類型 152 if (parameterValue != null && !"".equals(parameterValue)) { 153 String s = new String(parameterValue); 154 return s.toCharArray()[0]; 155 } else { 156 return ' '; 157 } 158 159 } else if (short.class.isAssignableFrom(typeClass)) { 160 // 11.判斷基礎數據類型的short類型 161 if (parameterValue != null && !"".equals(parameterValue)) { 162 return Short.valueOf(parameterValue); 163 } else { 164 return 0; 165 } 166 167 } else if (byte.class.isAssignableFrom(typeClass)) { 168 169 // 12.判斷基礎數據類型的byte類型 170 if (parameterValue != null && !"".equals(parameterValue)) { 171 return Byte.valueOf(parameterValue); 172 } else { 173 return 0; 174 } 175 176 } 177 return null; 178 179 } 180 181 /** 182 * 綁定日期類型,默認支持的格式爲: 1.yyyy-mm-dd hh:mm:ss 2.yyyy-mm-dd 183 * 184 * @param typeClass 185 * @param parameter 186 * @param request 187 * @return 188 */ 189 public static Object bindDate(Class<?> typeClass, Parameter parameter, HttpServletRequest request) { 190 if (Date.class.isAssignableFrom(typeClass)) { 191 192 // 10.判斷基礎數據類型的char類型 193 Param param = parameter.getAnnotation(Param.class); 194 System.out.println("--綁定字段名 :" + param.value()); 195 String parameterValue = request.getParameter(param.value()); 196 String pattern = null; 197 198 if (parameterValue != null && !"".equals(parameterValue)) { 199 if (parameterValue.lastIndexOf(":") > 0) { 200 pattern = "yyyy-MM-dd hh:mm:ss"; 201 } else { 202 pattern = "yyyy-MM-dd"; 203 } 204 SimpleDateFormat format = new SimpleDateFormat(pattern); 205 206 try { 207 return format.parse(parameterValue); 208 } catch (ParseException e) { 209 e.printStackTrace(); 210 } 211 } 212 213 } 214 return null; 215 } 216 217 218 219 }
2.修改ControllerRelolver類的綁定參數的方法getparameterObjectsapp
1 private Object[] getparameterObjects(Parameter[] parameters) { 2 // 1.建立設置一個參數對象的數組,參數的格式和參數類型的個一致 3 Object[] parameterObjects = new Object[parameters.length]; 4 //2.根據參數的類型,將對於的對象填在對象數組中 5 for(int i=0;i<parameters.length;i++){ 6 7 Class<?> typeClass = parameters[i].getType(); 8 //3.根據判斷方法參數的類型和咱們制定的4個做用是不是父子類關係。若是是就賦值 9 //---綁定域對象request,reponse,session,application 10 Object scopeData = DataBind.bindScope(typeClass, request, response, session, application); 11 //---綁定基礎數據類型------------------------------ 12 if(scopeData!=null){ 13 parameterObjects[i]=scopeData; 14 continue; 15 } 16 Object basicData = DataBind.bindBasicData(typeClass, parameters[i], request); 17 if(basicData!=null){ 18 parameterObjects[i]=basicData; 19 continue; 20 } 21 //---綁定日期格式------- 22 Object dateData =DataBind.bindDate(typeClass, parameters[i], request); 23 if(dateData!=null){ 24 parameterObjects[i]=dateData; 25 continue; 26 } 27 //---綁定數組數據 28 Object arrayData = DataBind.bindArray(typeClass, parameters[i], request); 29 if(arrayData!=null){ 30 parameterObjects[i]=arrayData; 31 continue; 32 } 33 34 } 35 return parameterObjects; 36 }
1.測試目錄jsp
1.測試頁面代碼post
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 用戶註冊 11 <form action="${pageContext.request.contextPath }/register.do" method="post"> 12 用戶名:<input name="username" type="text" /><br/> 13 密碼: <input name="password" type="text" /><br/> 14 年齡: <input name="age" type="text" /><br/> 15 出生日期: <input name="date" type="date"><br/> 16 <input type="submit" value="註冊"> 17 </form> 18 </body> 19 </html>
2.測試的Controller代碼測試
1 /** 2 * 註冊頁面 3 * @param username 4 * @param password 5 * @return 6 */ 7 @RequestMapping(value = "/register") 8 public String register(@Param("username") String username,@Param("password") String password ,@Param("age") long age,HttpServletRequest request,@Param("date") Date date){ 9 System.out.println("用戶名:"+username+",密碼:"+password+",年齡"+age); 10 System.out.println(request.getRequestURI()); 11 System.out.println(date); 12 return "redirect:/register.jsp"; 13 }
3.測試結果