【IT168技术文档】
概述
在低版本的Spring中,你必须通过JSTL或<spring:bind>将表单对象绑定到HTML表单页面中,对于习惯了Struts表单标签的开发者来说,Spring MVC的这一表现确实让人失望。不过这一情况已经一去不复返了,从Spring 2.0开始,Spring MVC开始全面支持表单标签,通过Spring MVC表单标签,我们可以很容易地将控制器相关的表单对象绑定到HTML表单元素中。
在上一篇文章《Spring MVC的表单控制器》中(http://tech.it168.com/j/2007-07-26/200707261434046.shtml)我们已经使用到了部分的Spring MVC表单标签,在本文中我们将对Spring MVC表单标签进行全面的介绍,让我们首先从<form:form>标签开始吧。
form标签
和使用任何JSP扩展标签一样,在使用Spring表单标签之前,你必须在JSP页面中添加一行引用Spring表单标签的声明,如下所示:
一般情况下,我们使用“form”作为Spring MVC表单标签的前缀,当然只要愿意,你可以调整为其它的前缀名。在声明好标签引用后,就可以在该JSP文件中使用所有Spring MVC的表单标签了。下面是一个使用<form:form>表单标签的示例,它将最终生成一个HTML的 form表单:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> ①引入标签的声明 <html> … ②声明后,在页面中就可以使用任意Spring表单标签了 </html>
<form:form> 用户名:<form:input path="userName" /> <br> 密 码:<form:password path="password" /><br> Email:<form:input path="email" /><br> <input type="submit" value="注册" name="testSubmit"/> <input type="reset" value="重置" /> </form:form>
回忆一下我们在《Spring MVC的表单控制器》(http://tech.it168.com/j/2007-07-26/200707261434046.shtml)文章中介绍的用户注册表单控制器,用户通过GET请求调用表单控制器时,表单控制器生成一个新的表单对象,然后重定向到表单输入页面。正因为表单页面是通过访问表单控制器导向过来的,所以<form:form>标签本身无需做额外的设置就可以达到以下两个目标:
1) 它不需要象HTML的<form>标签或Struts的表单标签一样通过action属性指定表单提交的地址。假设和<form:form>标签对应的控制器的URL是“/registerUser.html”,应用部署目录为“baobaotao”,则最后产生的HTML代码自动包含表单提交地址:
<form id="command" method="post" action="/baobaotao//registerUser.html">…</form>
2) <form:form>标签内部的组件标签(如<form:input>、<form:password>等)可以直接和表单控制器所对应的表单对象进行值绑定。
默认情况下,表单控制器将表单对象以“command”为名放到PageContext中,你可以通过表单控制器commandName属性的设置使用其它的名字(假设设置为“user”),这时你必须通过<form:form commandName="user">显式指定绑定的表单对象名称。
除了commandName属性外,Spring表单标签拥有丰富的可设置属性,这些属性大都是HTML表单标签属性的镜像,如onclick、ondblclick、tabindex等等。需要注意的一点是这些属性都是小写的,而对应的HTML标签的属性则没有这个限制。但是有几个和HTML标签有区别的属性,我们通过表 1进行说明:
表 1 表单元素标签特殊属性
目录
|
说明
|
cssClass
|
使用该属性指定表单元素CSS样式名,相当于HTML元素的class属性。示例:<form:input path="userName" cssClass="inputStyle"/>。
|
cssStyle
|
直接通过该属性指定样式,相当于HTML元素的style属性。示例:
<form:input path="userName" cssStyle="width:100px"/>。
|
cssErrorClass
|
cssClass表示表单元素未发生错误时对应的样式,而cssErrorClass表示表单元素发生错误时对应的样式,示例:
<form:input path="userName" cssClass="sty1" cssErrorClass= "sty2"/>
|