使用SpringMVC與前端頁面表單資料互動時,有兩種方式(自己試的,如果還有其他,還望指出)
一種是:直接直接表單送出 $("#myform").submit();
這種方式的送出,背景接收可以是Bean對象、或者直接屬性名、或者request.getParameter("");
比如:僞代碼
<form action="login" id="myform">
name: <input type="text" name="username" /> <br />
password:<input type="password" name="password" /> <br>
<input type = "button" value="送出" οnclick="doLogin()" />
</form>
Js
<script>
function doLogin() {
$("#myform").submit();
}
</script>
背景接收
1、 @RequestMapping("/login")
public String doLogin(String username, String password) {
}
如果表單元素name和方法裡面的變量不一緻,可以使用@RequestParam("username") String username
2、@RequestMapping("/login")
public String doLogin(LoginUser loginUser) {
}
可以自動将表單元素封裝到對應bean
3、可以使用HttpServletRequest擷取
@RequestMapping("/login")
public String doLogin(HttpServletRequest request) {
String username = request.getParameter("username");
}
第二種送出:Ajax post送出
<script>
function doLogin() {
$.ajax({
url:'<%=request.getContentPath%>/login',
type:'post',
data:$("#myform").serialize(),
success:function(data) {
},
error:function() {
}
});
}
</script>
如果ajax這樣送出,背景接收,上面三種方式同樣适用
但如果我們要使用@RequestBody方式接收的話,由于其隻能接收一個Json的字元串,是以我們要在送出的時候把表單資料轉換成json字元串
目前沒有js支援自動轉換,需要我們手動去
var d = {};
var t = $('#loginform').serializeArray();
$.each(t, function() {
d[this.name] = this.value;
});
var data = JSON.stringify(d);
這樣data就是json格式 {username:'1', password:'2'},同時切記在送出的js裡面要加上
contentType:'application/json;charset=UTF-8'
data:JSON.stringify(d); // 上面那段轉換
背景就可以使用@RequestBody
@RequestMapping("/login")
public String doLogin(@RequestBody LoginUser loginUser) {
}