springController:
- @Controller
- @RequestMapping("/user")
- public UserController extends BaseController{
- @RequestMapping("/addUser")
- public void testBinderOuput(@ModelAttribute User user, HttpServletRequest request, HttpServletResponse response){
- System.out.println(user);
- }
- }
Use對象:
- public Class User{
- private String name;
- private int sex;
- private String address;
- private int id;
- public int getSex() {
- return sex;
- }
- public void setSex(int sex) {
- this.sex = sex;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
請求路徑:
localhost/user/addUser?user.name="test"
那么在后台接受到的參數中,user對象的name屬性是null。如果路徑換為localhost/user/addUser?name="test",則user對象的name屬性是test。
這里必須用name="test"而不是user.name="test",因為默認情況下springMVC是不支持user.name這種傳參方式的。
如果有個對象manager中也有name這個相同的屬性,那么可以采用user.name,manager.name來傳輸參數。但是這個需要在controller中添加一個前綴綁定:
添加綁定前綴后的controller類如下:
- @Controller
- @RequestMapping("/user")
- public UserController extends BaseController{
- @InitBinder("manager")
- public void initBinder1(WebDataBinder binder) {
- binder.setFieldDefaultPrefix("manager.");
- }
- @InitBinder("user")
- public void initBinder2(WebDataBinder binder) {
- binder.setFieldDefaultPrefix("user.");
- }
- @RequestMapping("/addUser")
- public void testBinderOuput(@ModelAttribute User user, HttpServletRequest request, HttpServletResponse response){
- System.out.println(user.getName);
- }
- @RequestMapping("/addManager")
- public void testBinderOuput(@ModelAttribute Manager manager, HttpServletRequest request, HttpServletResponse response){
- System.out.println(manager.getName);
- }
- }
這樣在使用連接localhost/user/addUser?user.name="test",去請求時,后台拿到的name的參數就不為null了。
有個專門討論這個問題的主題:http://www.iteye.com/topic/1124433?page=2可以參考下