Spring MVC---數據綁定和表單標籤

2019-10-26     Java架構人生

原文地址:https://www.cnblogs.com/zhanglei93/p/6273655.html

作者:best.lei

數據綁定和表單標籤

  • 數據綁定

數據綁定是將用戶輸入綁定到領域模型的一種特性,在Spring MVC的controller和view數據傳遞中,基於HTTP請求的特性,所有HTTP請求參數的類型均為字符串,如果模型領域需要綁定的類型為double或int,則需要手動進行類型轉換,而有了數據綁定後,就不需要手動將HTTP請求中的String類型轉換為模型需要的類型了,數據綁定的另一個好處是,當輸入驗證失敗時,會重新生成一個HTML表單,無需重新填寫輸入欄位。

  • 表單標籤庫

表單標籤庫中包含了可以用在JSP頁面中渲染HTML元素的標籤。為了使用這些標籤,必須在JSP頁面開頭處聲明taglib指令。

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

表單標籤庫中有input、password、hidden、textarea、checkbox、checkboxes、radiobutton、radiobuttons、select、option、options、errors。表單標籤有acceptCharset、commandName、cssClass、cssStyle、htmlEscape、modelAttribute等屬性。

  1. input標籤:input標籤渲染元素,這個標籤最重要的是path屬性,該欄位將輸入綁定到form backing object的一個屬性。如下所示,這個input標籤被綁定到了user對象的userName屬性上








  1. password標籤:渲染元素,password標籤與input標籤相似,只不過它有一個showPassword屬性。
  2. textare標籤:渲染一個HTML的textarea元素。textarea基本上就是支持多行輸入的input元素。
  3. checkbox標籤:渲染元素,同樣是通過path屬性實現數據綁定,同時checkboxes渲染多個checkbox元素。
  4. radiobutton標籤渲染元素,radiobuttons渲染多個radio元素。
  5. select標籤:渲染一個HTML的select元素,被渲染元素的選項可能來自賦予其items屬性的Collection、Map、Array,或者來自一個嵌套的option或options標籤。
  • 數據綁定範例

如上分別介紹了數據綁定的定義和優勢,以及一些表單標籤,為了讓大家能進一步了解上面的內容,範例中實現了用戶類屬性和JSP中表單的綁定,同時在JSP中分別展示了input、password、textarea、checkbox、select標籤。

我們首先看一下User類,類中包含User的屬性,以及對屬性欄位的get和set方法:

public class User {
private String userName; //用戶名
private String password; //密碼
private Integer sex; //性別
private boolean marriage; //是否結婚
private ArrayList hobby; //興趣愛好
private ArrayList contacts;//人脈
private String carrer; //職業
private String houseRegister; //戶籍
private String remark; //個人描述
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public String getHouseRegister() {
return houseRegister;
}
public void setHouseRegister(String houseRegister) {
this.houseRegister = houseRegister;
}
public String getCarrer() {
return carrer;
}
public void setCarrer(String carrer) {
this.carrer = carrer;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public boolean isMarriage() {
return marriage;
}
public void setMarriage(boolean marriage) {
this.marriage = marriage;
}
public ArrayList getHobby() {
return hobby;
}
public void setHobby(ArrayList hobby) {
this.hobby = hobby;
}
public ArrayList getContacts() {
return contacts;
}
public void setContacts(ArrayList contacts) {
this.contacts = contacts;
}
}

我們的Controller類中定義映射請求的方法,其中包括處理userInput請求的inputUser方法,以及userSave請求的addUser方法,其中在addUser方法中用到了重定向。其中通過@Autowired注釋在ProductController對象中主動注入UserService對象,實現對user對象的保存和查詢等操作;通過model的addAttribute方法將User類對象、HashMap類型的hobbys對象、String[]類型的carrers對象傳遞給View(JSP),代碼如下:

同時,為了避免中文亂碼的問題,需要在web.xml文件中增加編碼過濾器,同時JSP頁面編碼設置為UTF-8,form表單的提交方式必須為post,我們先看web.xml文件的配置信息:

UserAddJSP文件格式如下,其中將Map類型的hobbys綁定到了checkboxes上,將String[]類型的carrer綁定到了select上,實現了通過option標籤對select添加選項,同時method方法需指定為post來避免中文亂碼的問題。

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>



Add a User





Add a User



















張三
李四
王五
趙六































UserList.JSP文件實現對保存的user信息的遍歷展示。

因為該工程是在上一篇工程中增加的,因此其他的配置文件與上一篇工程中相同,這裡不再做過多的贅述,希望讀者見諒。

運行該程序在瀏覽器中輸入http://localhost:8081/SpringMVC/userInput可以看到左圖,填寫表單完成,點擊Add User按鈕,即可看到右圖的輸出信息,不知道讀者是否發現輸出信息中存在問題,興趣愛好為[1],戶籍也為1,輸出的為表單中選擇的索引位置,還有好像保單中忘了指定User的性別了,導致輸入性別列為空。這些問題是由於本文的疏忽造成的,有興趣的讀者可以對這篇博客做更加完善的改正,謝謝閱讀!

文章來源: https://twgreatdaily.com/zh-tw/lfnRBW4BMH2_cNUg243q.html