其實就是獲取前臺提交的參數,隨便怎麼叫,有人喜歡叫參數綁定,有人喜歡叫參數驅動,我覺得參數獲取最直白。
簡單參數:(Integer、String、Float、Double、Boolean)
- 實例:
jsp頁面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form action="${pageContext.request.contextPath }/testBaseParameter.action" method="POST"> id: <input name="id" type="text"/> name: <input name="name" type="text"/> <input value="提交" type="submit"/> </form> </body> </html>
處理器:注意,如果是新建的測試包,別忘了配置掃描此包,使註解生效。
package hh.test; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class TestGetParameter { @RequestMapping("/testBaseParameter.action") public void getBaseParameter(Integer id,String name) { System.out.println("id:"+id+" name:"+name); } }
表單提交頁面:
提交結果:
控制檯:可以看到因爲我寫的處理器是沒有返回值的,但是SpringMVC還是會自動去獲取ModelAndView,因爲我未設置View,他自動將我上一步提交的路徑作爲View路徑,所以提示404,前臺頁面同樣出現404。
不過我們的目的達到了,獲取到了前臺提交的基本類型的數據。注意使用這種方式時,前臺提交的參數不能有空(null)值。
DEBUG [http-nio-8080-exec-7] - POST "/ssm/testBaseParameter.action", parameters={masked} DEBUG [http-nio-8080-exec-7] - Mapped to public void hh.test.TestGetParameter.getBaseParameter(java.lang.Integer,java.lang.String) id:111 name:胡胡 DEBUG [http-nio-8080-exec-7] - View name 'testBaseParameter', model {} DEBUG [http-nio-8080-exec-7] - Forwarding to [testBaseParameter] DEBUG [http-nio-8080-exec-7] - Completed 404 NOT_FOUND
瀏覽器:
對象類型參數(實體類bean):
以User對象爲例:
- User對象有以下屬性:
private Integer id; private String name; private String address; private String sex;
- 提交表單:
<form action="${pageContext.request.contextPath }/testBeanParameter.action" method="POST"> id:<input name="id" type="text" /><br> name:<input name="name" type="text" /><br> sex:<input name="sex" type="text" /><br> address:<input name="address" type="text" /><br> <input type="submit" value="提交" /> </form>
- 處理器方法:
@RequestMapping("/testBeanParameter.action") public void getBaseParameter(User user) { System.out.println(user); }
- 提交表單內容:
- 提交結果:
- 控制檯:
DEBUG [http-nio-8080-exec-3] - POST "/ssm/testBeanParameter.action", parameters={masked} DEBUG [http-nio-8080-exec-3] - Mapped to public void hh.test.TestGetParameter.getBaseParameter(hh.pojo.User) User [id=111, name=胡胡, sex=男, address=山東省] DEBUG [http-nio-8080-exec-3] - View name 'testBeanParameter', model {user=User [id=111, name=胡胡, sex=男, address=山東省], org.springframework.validation.BindingResult.user=org.springframework.validation.BeanPropertyBindingResult: 0 errors} DEBUG [http-nio-8080-exec-3] - Forwarding to [testBeanParameter] DEBUG [http-nio-8080-exec-3] - Completed 404 NOT_FOUND
- 頁面:
可以看到,表單提交的內容也成功封裝到了對象中,說明測試成功。
注意:使用對象驅動時,提交表單<input>元素的name屬性值要與對應的對象屬性名一致。
包裝類類型(即,類中有對象類型的引用作爲屬性):
如:Users.java類中,有如下屬性:
private Integer number; private User user;
其中,User對象是一個引用類型的屬性。這種情況下,如果想將前臺提交的參數直接封裝到Users對象中的User引用中,就是屬於包裝類驅動。
這種情況下,有點經驗的程序員都可以猜到如何書寫代碼。
- 處理器代碼:
@RequestMapping("/testBeanParameter.action") public void getBaseParameter(Users users) { System.out.println(users.user); }
- 提交表單:
<form action="${pageContext.request.contextPath }/testBeanParameter.action" method="POST"> id:<input name="user.id" type="text" /><br> name:<input name="user.name" type="text" /><br> sex:<input name="user.sex" type="text" /><br> address:<input name="user.address" type="text" /><br> <input type="submit" value="提交" /> </form>
只要稍微小改下<input>標籤的name屬性就可以了。這裏不再做測試了。