Form表單提交引數型別與後臺實體引數型別的問題
阿新 • • 發佈:2019-01-05
在SpringMVC+Hibernate+Spring的框架下,Jsp頁面的Form表單提交資料
1.肯定是以 key=val 的形式進行提交到後臺
2.提交的key的型別是根據你的在Jsp頁面標籤的型別而定的
a.如果是用的
JSP:Form 表單的程式碼
<input type="text" id="showPicNum" name="showPicNum" maxlength="4"/>
後臺ctrl層程式碼:
@RequestMapping("/addAdspace") public String addAdspace(@ModelAttribute AdspaceInfo adspace) throws Exception { adspaceService.addAdspace(adspace); return "redirect:/adspace/getAllAdspace"; }
接收引數的AdspaceInfo類中的屬性程式碼:
private byte showPicNum;
那麼預設提交到後臺的key 的型別就是String,而後接收的屬性必須是String型別的才能接收,而你用來接受引數值的屬性型別為Byte型別,相當於要將String型別的強轉位byte型別的,在不知道具體傳過來的引數是什麼的時候,這個時候伺服器一般不會做這種強轉,報HTTP Status 400(BAD REQUEST) 的錯誤。
b.如果是用的
這個標籤提交的,那麼預設提交到後來的key的型別就是int。後臺接收的屬性可以使int,long,byte,String型別的。<select name="showPicNum"> <option value="1">1 <option value="2">2 <option value="3">3 </select>
---------------------------------------
如果
<select name="showPicNum">
<option value="a">1
<option value="b">2
<option value="c">3
</select>
這個時候後天接收的引數就必須是String型別的了,否則也會報HTTP Status 400 的錯誤。因為伺服器不能把 String型別的a b c 解析為數字型別的。所以會報錯。
所以一般在ssh框架的專案中,一般的資料流程都是 前臺頁面---> ctrl層 ----> service層,dao層---> 資料庫。資料由前臺頁面傳遞到ctrl層的流程中,一般會多寫一個vo類,vo類
裡面存放要從前臺接收的屬性,一般屬性的型別根據前臺傳遞的屬性定,不一定跟實體的屬性的型別一致。如果真的要將前臺傳遞過來的資料儲存到資料庫的時候,就可以在
service層,將封裝在vo類裡的資料通過getter方法取出資料在轉換成相應的型別通過實體的setter方法封裝到實體中,最後在儲存到資料中。