普通的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属性中。
要值得注意的一点是,我们在使用表单标签库的时候直接使用而没有进行数据绑定是无法使用的。
=========================================