1. 程式人生 > >Form表單提交引數型別與後臺實體引數型別的問題

Form表單提交引數型別與後臺實體引數型別的問題

在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.如果是用的

				<select name="showPicNum">
					<option value="1">1
					<option value="2">2
					<option value="3">3
				</select>
這個標籤提交的,那麼預設提交到後來的key的型別就是int。後臺接收的屬性可以使int,long,byte,String型別的。

---------------------------------------

如果

<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方法封裝到實體中,最後在儲存到資料中。