SpringMvc學習筆記——參數獲取/綁定/驅動

其實就是獲取前臺提交的參數,隨便怎麼叫,有人喜歡叫參數綁定,有人喜歡叫參數驅動,我覺得參數獲取最直白。

簡單參數:(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屬性就可以了。這裏不再做測試了。

SpringMVC還提供了自定義類型的參數獲取,比如獲取日期時間,有的網站喜歡特立獨行,搞個特殊的日期格式,如:1999*9*9,這時,SpringMVC可能無法自動將此字符串封裝到Date類型的屬性中,這時就可以自定義一個解析器,來解析此類型的字符串。這種情況雖然不常見,但是也要了解下,大致上就是實現一個接口,在一個方法中的定義自己的封裝規則,想要具體瞭解的可以自己找度娘,這裏就不詳細說了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章