一篇文章帶你學(xué)會(huì)Spring?MVC表單標(biāo)簽
使用Spring MVC提供的表單標(biāo)簽可以讓JSP視圖方便展示地Model中的數(shù)據(jù),特別適合修改現(xiàn)有記錄數(shù)據(jù)的情形,通常進(jìn)行修改操作時(shí),原有數(shù)據(jù)要先展示出來,再供用戶重新選擇或修改。使用表單標(biāo)簽?zāi)軐?shí)現(xiàn)數(shù)據(jù)綁定,讓表單中的各個(gè)表單域中的name屬性綁定到對(duì)象模型中來。JSP頁面中要想使用SpringMVC自帶標(biāo)簽庫(kù),需要導(dǎo)入標(biāo)簽庫(kù),在JSP文件開頭聲明如下:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
Spring的form標(biāo)簽?zāi)軌蜃詣?dòng)綁定來自Model中的一個(gè)屬性值到當(dāng)前form對(duì)應(yīng)的實(shí)體對(duì)象,默認(rèn)是command屬性(可以通過ModelAttribute重寫默認(rèn)屬性),這樣就可以在form表單體里面方便的使用該對(duì)象的屬性。Form標(biāo)簽下面又包含input,password,select/option/options,checkbox/checkboxs,radiobutton,radiobuttons等等子標(biāo)簽。這些標(biāo)簽的基本介紹如下圖所示。
form 標(biāo)簽
form 標(biāo)簽主要包括下表所示的多個(gè)屬性
@RequestMapping("detail/{id}") public ModelAndView detail (@PathVariable int id){ User myuser=userService.getUserById(id); ModelAndView mv=new ModelAndView(); mv.addObject("user",myuser); System.out.println(userService..getUserById(id).getUsername()); mv.setViewName("detail"); return mv; }
該代碼表示接收到 id 后,調(diào)用業(yè)務(wù)層,獲取到該 id 號(hào)的 User 類的用戶對(duì)象 myuser,然后將 myuser 對(duì)象封裝添加到 ModelAndView 中來,鍵為“user”,值為myuser 對(duì)象,這樣這個(gè)模型舊風(fēng)裝好了屬性名稱為 user 的鍵值對(duì)(值為 myuser)。然后進(jìn)入 JSP 頁面,form 表單利用 commandName 與 modelAttribute 指定該模型的“user”屬性名,就可綁定該模型屬性的值(即 User 類的myuser 對(duì)象),并把該模型屬性的值 myuser 對(duì)象中的各個(gè)屬性與 form 表單的各個(gè)子標(biāo)簽一一綁定。Form 表單中應(yīng)用 commandName 綁定模型屬性名稱示例代碼如下:
<form:form action="update" method="post" commandName="user"> //省略紙標(biāo)簽 </form:form>
這樣就把后臺(tái)控制器方法中創(chuàng)建的對(duì)象傳遞過來在前臺(tái)展示了。
input 標(biāo)簽
input標(biāo)簽,用于展示控制器方法中封裝的基本類型的Model數(shù)據(jù)。語法如下:
<form:input path="domain的屬性名">
其中path用于指定要綁定的屬性,比如上面案例中,表單中指定了要綁定的對(duì)象為User類的myuser,但要在表單中具體顯示該對(duì)象的用戶名username還需要這樣做:
<form:form action="update" method="post" commandName="user"> <form:input path="username"/> </form:form>
這樣在表單綁定myuser對(duì)象的基礎(chǔ)上,進(jìn)一步把該對(duì)象的username屬性綁定到文本輸入框中來。
password 標(biāo)簽
password標(biāo)簽,用于填寫密碼,有掩碼。語法如下:
<form:password path="domain的屬性名"/>
其path屬性含義同上。上例中,若還要展示用戶的密碼,則代碼如下所示:
<form:form action="update" method="post" commandName="user"> <form:input path="username"/></br> <form:password path="password"/></br> </form:form>
checkbox 標(biāo)簽
該標(biāo)簽的屬性基本與input相同,但另有一個(gè)label屬性用于指定顯示的得選框的值。
<form:checkbox path="domain的屬性名" label="復(fù)選框的值">
如果該屬性名存在,則默認(rèn)已經(jīng)選上。前臺(tái)關(guān)鍵代碼如下:
myInteresting=new ArrayList<String>(); myInteresting.add("美食"); myInteresting.add("音樂");
前臺(tái)關(guān)鍵代碼如下,則顯示效果如圖7.1所示。
<form:checkbox path="myInteresting" value="舞蹈" label="舞蹈"/> <form:checkbox path="myInteresting" value="旅游" label="旅游"/> <form:checkbox path="myInteresting" value="唱歌" label="唱歌"/> <form:checkbox path="myInteresting" value="音樂" label="音樂"/> <form:checkbox path="myInteresting" value="運(yùn)動(dòng)" label="運(yùn)動(dòng)"/> <form:checkbox path="myInteresting" value="美食" label="美食"/>
顯示效果如圖所示:
checkboxes 標(biāo)簽
checkboxes的基本語法如下:
<form:checkboxes items="${Model中Collections的屬性}" path="domain的屬性名"/>
checkboxes有幾個(gè)重要屬性如下表所示。
假定后臺(tái)控制器方法中設(shè)置了一個(gè)集合allIntersting,用于描述興趣愛好,其中包含了所有的興趣愛好:旅游,音樂,唱歌,跳舞,運(yùn)動(dòng),美食。但某一個(gè)人的興趣可能只有其中若干項(xiàng),所以再定義一個(gè)集合myIntesting,只含部分興趣愛好。前臺(tái)form表單需要把所有興趣愛好以多選項(xiàng)的形式列出來,對(duì)某一個(gè)人有的興趣愛好則打上勾。后臺(tái)代碼如下:
@RequestMapping("/detail/{id}") public ModelAndView detail(@PathVariable int id){ List<String> allInteresting=new ArrayList<String>(); allInteresting.add("舞蹈"); allInteresting.add("旅游"); allInteresting.add("唱歌"); allInteresting.add("音樂"); allInteresting.add("運(yùn)動(dòng)"); allInteresting.add("美食"); UserService userService=new UserService(); User user=userService.getUserById(id); List<String> myInteresting=new ArrayList<String>(); myInteresting.add("旅游"); myInteresting.add("音樂"); user.setMyInteresting(myInteresting); ModelAndView mv=new ModelAndView(); mv.addObject("allInteresting", allInteresting); mv.addObject("user", user); mv.setViewName("detail"); return mv; }
前臺(tái)關(guān)鍵代碼如下:
<form:checkboxes path="myInteresting" items="${allInteresting}"/>
最終結(jié)果如圖所示:
對(duì)于Map類型的Collection來說,key值為標(biāo)簽的value值,value值為標(biāo)簽的label值,但是需要注意HashMap是亂序的
radiobutton 與 radiobuttons 標(biāo)簽
Radiobutton的語法如下:
<form:radiobutton path="domain屬性名" label=”顯示的值” value=”值”/>
通常有多個(gè),然后若后臺(tái)傳來的domain屬性名的值跟其中一個(gè)value的值相同,則為選中。
Radiobuttons的語法如下:
<form:radiobuttons path="domain屬性值" items="${傳入的Collection}"/>
其規(guī)則同checkboxes。如果后臺(tái)傳來的的domain屬性名的值跟items集合中的其中一個(gè)value的值相同,則為選中。后臺(tái)代碼:
@RequestMapping("/detail/{id}") public ModelAndView detail(@PathVariable int id){ List<String> cities=new ArrayList<String>(); cities.add("北京"); cities.add("上海"); cities.add("廣州"); cities.add("深圳"); String city="深圳"; UserService userService=new UserService(); User user=userService.getUserById(id); user.setCity(city); user.setGender(true); ModelAndView mv=new ModelAndView(); mv.addObject("cities", cities); mv.addObject("user", user); mv.setViewName("detail"); return mv; }
前臺(tái)代碼如下:
<tr> <td>性別:</td> <td> <form:radiobutton path="gender" value="true" label="男"/> <form:radiobutton path="gender" value="false" label="女"/> </td> </tr> <tr> <td>所在城市1</td> <td> <form:radiobuttons path="city" items="${cities}"/><br/> </td> </tr>
最終結(jié)果如圖所示:
select 與 option/options 標(biāo)簽
語法格式如下:
<form:select path="domain的屬性名"> <form:option value=”值”>顯示的值</option> <form:options items="${Collections變量}"/> </form:select>
其中items的使用同前。
前臺(tái)代碼同前,后臺(tái)代碼如下:
<tr> <td>所在城市2</td> <td> <form:select path="city"> <option>請(qǐng)選擇城市</option> <form:option value="北京">北京</form:option> <form:option value="上海">上海</form:option> <form:option value="廣州">廣州</form:option> <form:option value="深圳">深圳</form:option> </form:select> </td> </tr> <tr> <td>所在城市3</td> <td> <form:select path="city"> <option>請(qǐng)選擇城市</option> <form:options items="${cities}"/> </form:select> </td> </tr>
效果如圖所示:
總結(jié)
到此這篇關(guān)于一篇文章帶你學(xué)會(huì)Spring MVC表單標(biāo)簽的文章就介紹到這了,更多相關(guān)Spring MVC表單標(biāo)簽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot返回結(jié)果統(tǒng)一處理實(shí)例詳解
這篇文章主要為大家介紹了SpringBoot返回結(jié)果統(tǒng)一處理實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12java中快速創(chuàng)建帶初始值的List和Map實(shí)例
下面小編就為大家?guī)硪黄猨ava中快速創(chuàng)建帶初始值的List和Map實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10JAVA基礎(chǔ)之注解與反射的使用方法和場(chǎng)景
這篇文章主要給大家介紹了關(guān)于JAVA基礎(chǔ)之注解與反射的使用方法和場(chǎng)景的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03SpringBoot全局異常處理之解決404/500錯(cuò)誤
在搭建項(xiàng)目框架的時(shí)候用的是springboot,想統(tǒng)一處理異常,但是發(fā)現(xiàn)404的錯(cuò)誤總是捕捉不到,總是返回的是springBoot自帶的錯(cuò)誤結(jié)果信息,這篇文章主要給大家介紹了關(guān)于SpringBoot全局異常處理之解決404/500錯(cuò)誤的相關(guān)資料,需要的朋友可以參考下2023-11-11Java中ThreadLocal使用原理及Synchronized區(qū)別
ThreadLocal叫做線程變量,本文詳細(xì)的介紹了ThreadLocal使用原理及Synchronized區(qū)別,有需要的朋友可以參考一下,希望對(duì)你有所幫助。2023-05-05Spring Boot使用Value注解給靜態(tài)變量賦值的方法
這篇文章主要介紹了Spring Boot使用Value注解給靜態(tài)變量賦值的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07