06-springMVC-引數繫結-01
阿新 • • 發佈:2018-12-22
springMVC引數的繫結01
前言:
本篇介紹大概內容如下:
- 簡單引數的繫結
- @RequestParam註解的用法
- 如何用pojo接收引數(擴充套件了pojo和javaBean的介紹)
- 如何用包裝的pojo接收引數。
1. 簡單型別繫結
1.1 前臺請求引數和後臺處理器形參同名
- 當前臺頁面的請求引數名稱和Handler處理器方法的形參名稱一致
例如前臺表單:
<form action= "${pageContext.request.contextPath}/hello2.action" method = "post">
姓名: <input type="text" name="usersss" />
<input type="submit" value= "提交"/>
後臺處理:
@RequestMapping("/hello2") public String helloWorld2(String usersss, HttpServletRequest request,HttpServletResponse response,ModelMap modelMap) { System.out.println(usersss); }
前臺條表單提交以後,其值可以直接繫結上述同名的usersss中。可以直接使用。
1.2 前臺請求引數和後臺處理器形參不同名
- 使用@RequestParam註解,繫結引數(不要求和請求引數同名)
該註解的屬性有:
屬性名 | 描述 |
---|---|
value | 要繫結的請求引數的名字(是表單的話就是name的值) |
required | 是否必須, 預設為true,即必須有引數,否則會報錯 |
defaultValue | 預設值,表示如果請求中沒有要繫結的引數時的預設值。即在請求中找不到設定的value屬性的值時 |
@RequestMapping("/hello2")
public String helloWorld2(@RequestParam(value="usersss",required=false) String u, HttpServletRequest request,HttpServletResponse response,ModelMap modelMap) {
System.out.println(u+"=============");
}
這裡的u的值 (其實也就是改了個名字)和上邊同名的效果是一樣的, 建議無特殊需要還是使用同名的比較好。
1.3 支援繫結的資料型別
後臺處理器的形參最好使用包裝資料型別,因為基礎型別沒有null值
型別(中文) | 包裝型別 | 基本型別 |
---|---|---|
整型 | Integer | int |
字串 | String | String |
單精度 | Float | float |
雙精度 | Double | double |
布林型 | Boolean | boolean |
說明:對於布林型別的引數,請求的引數值為true或false。或者1或0
舉慄:
前臺請求: http://localhost:8080/hello.action?id=2&flag=false
後臺處理器方法形參如下:
public String editItem(Model model,Integer id,Boolean flag)
2. 通過pojo接收表單資料
有時候會遇到前臺頁面的表單請求引數有很多,這是不能把所有請求引數寫在後臺處理器方法中的形參上。 這樣雖然技術上可行,但是一來程式碼“不美觀” 二來 業務邏輯也會變得不清晰。
- 擴充套件: 理解一下pojo 和 javaBean(參考百度百科):
- 先簡單介紹一下什麼是pojo?
POJO(Plain Ordinary Java Object) 翻譯就是: 簡單的普通的java物件。
實際就是普通的javabeans,沒有業務邏輯,普通的java類,其中有一些屬性及getter setter方法的類就可以叫做POJO。
一般在web應用程式中建立一個數據庫的對映物件時,我們只能稱它為POJO(不能叫做javaBean)。POJO(Plain Old Java Object)這個名字用來強調它是一個普通java物件,而不是一個特殊的物件,其主要用來指代那些沒有遵從特定的Java物件模型、約定或框架(如EJB)的Java物件。理想地講,一個POJO是一個不受任何限制的Java物件.
即POJO是一個簡單的普通的Java物件,它不包含業務邏輯或持久邏輯等,但不是JavaBean、EntityBean等,不具有任何特殊角色和不繼承或不實現任何其它Java框架的類或介面。- 什麼是javaBean?
javaBean要比POJO複雜, JavaBean是可以複用的元件,對javaBean沒有嚴格的規範 , 理論上講,任何一個java類都可以是一個Bean. 單通常情況下, Java Bean 是被容器所建立的(eg:Tomcat),故 Java Bean應該有一個無參的構造器.
Java Bean 是不能被跨程序訪問的。JavaBean是一種元件技術,就好像你做了一個扳子,而這個扳子會在很多地方被拿去用,這個扳子也提供多種功能(你可以拿這個扳子扳、錘、撬等等),而這個扳子就是一個元件。
通過pojo接收表單資料
條件: pojo物件中的屬性和表單中input和name屬性一致
寫個小例子:
1. 先寫個pojo
package springmvc.test.one.bo;
/**
* pojo
* @author Administrator
*
*/
public class User {
// 姓名
private String name;
// 年齡
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
// 注意:這個pojo 我們只是用來接收引數,不去new它, 只需要必要的屬性和getter/setter方法即可
// public User(String name, Integer age) {
// super();
// this.name = name;
// this.age = age;
// }
// public User() {}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
}
請求的引數名稱和pojo的屬性名稱一致,會自動將請求引數賦值給pojo的屬性。
2. 前臺頁面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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">
<title>springmvc</title>
</head>
<body>
${ msg }
<form action="hello2.action" method="post">
姓名: <input name="name" value=""/> </br>
年齡: <input name = "age" value="" /> </br>
<button type= "submit" >提交</button>
</form>
</body>
</html>
效果如下:
3. 處理器方法
@RequestMapping("hello2")
public ModelAndView helloWorld2(User user ) {
//pojo 接收 引數
System.out.println(user.toString());
return null;
}
4. 點選頁面“提交”後效果
3.繫結包裝的pojo
白話意思就是 在搞一個pojo 裡邊搞一個屬性 型別是User 的。因此就叫做包裝的pojo.
這裡提醒一下: 基本規則就是 前臺頁面 引數的name 要和處理器中的 引數pojo的 private 的屬性名一致。 再怎麼包裝也是萬變不離其宗的。
舉慄:
1.新建包裝類 BzUser
package springmvc.test.one.bo;
/**
* 包裝pojo
* @author Administrator
*/
public class BzUser {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
2. 改造前臺頁面
將上個例子中的name 和 age 改為 user.name 和 user.age 即可
這裡的user 正是對應上了包裝類裡的 user屬性。
3. 改造前臺頁面
處理器沒怎麼變, 就是為了方便看到效果 輸出稍有改動
@RequestMapping("hello2")
public ModelAndView helloWorld2(BzUser bzUser ) {
//pojo 接收 引數
System.out.println(bzUser.getUser().toString());
return null;
}
4. 頁面點選提交以後效果
總結:
下篇學習 複雜引數的繫結。
注: 這裡的例子都是為了 深入理解springMVC做鋪墊的 ,看到springMVC的工作完成即可,不去涉及後臺資料庫的操作。達到效果即可。