普通的MVC設計模式中M代表模型層,V代表視圖層,C代表控制器,SpringMVC是一個典型的MVC設置模式的框架,對於視圖和控制器的優化很多,其中就有與控制器相結合的JSP的表單標簽庫。
我們先簡單寫一個JSP的文件,使用普通的HTML的表單:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <form action="action" method="post"> 11 username:<input type="text" name="username"/> 12 password:<input type="password" name="password"/>
<input type="submit" value="GO"/> 13 </form> 14 </body> 15 </html>
這樣顯示效果是這樣的:
username: password:
在實際使用的時候,Spring會提供一個表單標簽庫來渲染表單,這樣可以直接將標簽綁定到對象中,現在加入我有一個模型層
User.java
1 public User{ 2 String password; 3 String username; 4 //此處代碼略去 5 ... 6 }
如果我們使用表單標簽庫的標簽來渲染,可以直接將標簽綁定到User對象的password或者username。
在使用表單標簽庫的時候要先聲明:
1 <%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
然而表單標簽在不進行數據綁定是無法操作的,在運行程序的時候會報錯,因為表單標簽是依賴於數據綁定操作的。
我們在控制器中首先需要在這里新建一個User的引用,也就是說要有一個User對象才能使User對象的password和username綁定到input標簽,所以在Controller中我們應該先做以下操作:
1 @RequestMapping(value="/action")//這里action的地址 2 public String InputName(Model model){ 3 logger.info("Inputname called"); 4 model.addAttribute("user", new User());//這里給視圖層提供了數據的對象,用來數據綁定 5 return "JSPFile";//返回的是視圖的文件名 6 }
接下來我們可以使用表單標簽庫了:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>Insert title here</title> 9 </head> 10 <body> 13 <form:form commandName="user" action="action" method="post"> 14 username:<form:input path="username"/><!-- input type="text" name="username"/><br/><br/--> 15 password:<form:password path="password"/><!-- input type="password" name="password"/--> 16 <input type="submit" value="GO"/> 17 </form:form> 18 </body> 19 </html>
注意這里使用的表單標簽庫的標簽,commandName屬性是最重要的屬性,定義了模型屬性的名稱,我們之前的控制器中的
model.addAttribute("user", new User());
傳過來的是user,所以我們使用的user,之后的表單返回的就是這個模型的屬性。
然后input標簽中的path屬性:
commandName中的屬性值為user,而且path的屬性為username,那么username的input標簽被綁定到了user的username屬性中。
要值得注意的一點是,我們在使用表單標簽庫的時候直接使用而沒有進行數據綁定是無法使用的。
=========================================