在springmvc項目開發時,一般使用EL表達式和JSTL標簽來完成頁面視圖,其實spring也有自己的一套表單標簽庫,通過spring表單標簽,可以很容易的將模型數據中的表單/命令對象綁定到html表單元素中。在使用spring表單標簽之前,必須在jsp頁面中添加一行引用spring標簽庫的聲明,引入標簽聲明后就可以使用spring表單標簽了。代碼如下
<%@taglib prefix="fm" uri="http://www.springframework.org/tags/form" %> <fm:form method="post" modelAttribute="user"> 用戶編碼:<fm:input path="userCode"/><br/> 用戶名稱:<fm:input path="userName"/><br/> 用戶密碼:<fm:password path="password"/><br/> 用戶生日:<fm:input path="birthday" Class="Wdate" readonly="readonly" onclick="WdatePicker();"/><br/> 用戶地址:<fm:input path="address"/><br/> 聯系電話:<fm:input path="phone"/><br/> 用戶角色: <fm:radiobutton path="userRole" value="1"/>系統管理員 <fm:radiobutton path="userRole" value="2"/>經理 <fm:radiobutton path="userRole" value="3"/>普通用戶 <br/> <input type="submit" value="保存"/> </fm:form>
在上述代碼中的<fm:form>標簽的modelAttribute屬性用來指定綁定的模型屬性,若該屬性不指定,默認從模型中嘗試獲取名為"command"的表單對象,若不存在此表單對象,將會報錯,所以一般情況下,都會指定modelAttribute。還有<fm:input/>、<fm:password/>、<fm:radiobutton/>等標簽,基本上這些標簽都擁有以下屬性:
- path:屬性路徑,表示表單對象屬性,如userName、userCode等
spring的常用表單標簽
<fm:form/> 渲染表單元素
<fm:input/> 輸入框組件標簽
<fm:password/> 密碼框組件標簽
<fm:hidden/> 隱藏框組件標簽
<fm:textarea/> 多行輸入框組件標簽
<fm:radiobutton/> 單選按鈕組件標簽
<fm:checkbox/> 復選框組件標簽
<fm:select/> 下拉列表組件標簽
<fm:errors/> 顯示表單數據校驗所對應的錯誤信息
我們還發現form並沒有指定action屬性,這是因為通常我們通過get請求訪問含有表單的頁面,通過post請求提交表單頁面,那么最簡單的做法就是:獲取表單頁面和提交表單頁面的url地址是相同的,通過判斷method是get還是post,就可以確定需要進入到哪個控制器的處理方法進行請求的處理,所以<fm:form>標簽無需通過action屬性指定表單提交的目標url。換句話說,當不指定目標url時,會自動提交到獲取表單頁面的url(如/user/add.html),如下
@RequestMapping(value = "/add.html", method = RequestMethod.GET) public String add(@ModelAttribute("user") User user){ return "user/useradd"; } @RequestMapping(value = "add.html", method = RequestMethod.POST) public String addSave(User user, HttpSession session){ user.setCreatedBy(((User)session.getAttribute("userSession")).getId()); user.setCreationDate(new Date()); if (userService.add(user)){ return "redirect:/user/userlist.html"; } return "user/useradd"; }