- 浏览: 1016188 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
从2.0开始,Spring提供全面的,支持数据绑定的JSP标签来处理表单元素(如果你使用JSP和Spring的Web MVC框架的话)。 每个标签所支持的属性跟其对应的HTML标签相同,这样这些标签看起来就不陌生,而且很容易用。 由这些标签库生成的HTML页面符合HTML 4.01/XHTML 1.0标准。
与其它的标签库不同,Spring的表单标签库和Spring Web MVC框架是集成在一起的,因此它们可以直接使用命令对象(command object) 和其他由控制器处理的数据对象。 就像下面这些例子展示的一样,使用这些标签后,JSP 开发变得更加容易,代码也更加容易阅读和维护。
让我们通过例子来研究一下这些标签是怎样使用的。 在下面的例子中,当某个标签的含义不够明显时,我们把它所生成的HTML代码也一起列了出来。
Spring的表单标签库存在spring.jar
中。这个库的描述文件(descriptor)是 spring-form.tld
。
如果你想使用这些标签, 请在JSP代码的起始部分加入下面这行声明。
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
在上面的声明中, form
是这个标签库所提供标签的前缀名。
这个标签会生成HTML form标签,同时为form内部所包含的标签提供一个绑定路径(binding path)。 它把命令对象(command object)存在PageContext
中,这样form内部的标签 就可以使用这个对象了。标签库中的其他标签都声明在form标签的内部。
让我们假设有一个叫User
的领域对象,它是一个JavaBean,有着诸如 firstName
和lastName
这样的属性。我们将把它当作 一个表单支持对象(form backing object),它对应的表单控制器用 form.jsp
页面来显示表单。下面是form.jsp
的内容片段。
<form:form> <table> <tr> <td>First Name:</td> <td><form:input path="firstName" /></td> </tr> <tr> <td>Last Name:</td> <td><form:input path="lastName" /></td> </tr> <tr> <td colspan="3"> <input type="submit" value="Save Changes" /> </td> </tr> </table> </form:form>
上面例子中的firstName
和lastName
由控制器从 存在PageContext
中的命令对象中得到。 下面几个更复杂的例子展示了form内部标签的用法。
这是由form标签所生成的HTML代码,和标准的HTML form没有什么区别:
<form method="POST"> <table> <tr> <td>First Name:</td> <td><input name="firstName" type="text" value="Harry"/></td> <td></td> </tr> <tr> <td>Last Name:</td> <td><input name="lastName" type="text" value="Potter"/></td> <td></td> </tr> <tr> <td colspan="3"> <input type="submit" value="Save Changes" /> </td> </tr> </table> </form>
上面这个例子有一个隐藏的前提:表单支持对象(form backing object)的变量名是command
。 如果你将这个对象用其他名称加以定义(这可算是一种最佳实践),你就可以将这个变量名绑定到表单上,如下例所示。
<form:form commandName="user">
<table>
<tr>
<td>First Name:</td>
<td><form:input path="firstName" /></td>
</tr>
<tr>
<td>Last Name:</td>
<td><form:input path="lastName" /></td>
</tr>
<tr>
<td colspan="3">
<input type="submit" value="Save Changes" />
</td>
</tr>
</table>
</form:form>
这个标签生成text类型的HTML input标签。使用这个标签时,path属性的值将对应 HTML input标签中name属性的值。第 13.9.2 节 “form
标签”这一节中 有关于这个标签的例子。
这个标签生成checkbox类型的HTML input标签。
假设模型中的User
支持每个用户设置自己的喜好,比如新闻订阅或者一组业余爱好,等等。下面是Preferences
这个类的定义:
public class Preferences { private boolean receiveNewsletter; private String[] interests; private String favouriteWord; public boolean isReceiveNewsletter() { return receiveNewsletter; } public void setReceiveNewsletter(boolean receiveNewsletter) { this.receiveNewsletter = receiveNewsletter; } public String[] getInterests() { return interests; } public void setInterests(String[] interests) { this.interests = interests; } public String getFavouriteWord() { return favouriteWord; } public void setFavouriteWord(String favouriteWord) { this.favouriteWord = favouriteWord; } }
现在,form.jsp
可以这么写:
<form:form> <table> <tr> <td>Subscribe to newsletter?:</td> <%-- Approach 1: Property is of typejava.lang.Boolean
--%> <td><form:checkbox path="preferences.receiveNewsletter"/></td> <td></td> </tr> <tr> <td>Interests:</td> <td> <%-- Approach 2: Property is of an array or of typejava.util.Collection
--%> Quidditch: <form:checkbox path="preferences.interests" value="Quidditch"/> Herbology: <form:checkbox path="preferences.interests" value="Herbology"/> Defence Against the Dark Arts: <form:checkbox path="preferences.interests" value="Defence Against the Dark Arts"/> </td> <td></td> </tr> <tr> <td>Favourite Word:</td> <td> <%-- Approach 3: Property is of typejava.lang.Object
--%> Magic: <form:checkbox path="preferences.favouriteWord" value="Magic"/> </td> <td></td> </tr> </table> </form:form>
checkbox
有三种使用方法,应该可以满足我们全部可能的需求。
-
第一种用法:若绑定值是java.lang.Boolean类型,则值为
true
时,input(checkbox)
标为checked(选中)。其value
(值)属性对应于setValue(Object)
值属性的解析值。 -
第二种用法:若绑定值是array(数组)类型或
java.util.Collection
,则配置的setValue(Object)
值出现在绑定的Collection中时,input(checkbox)
标为checked(选中)。 -
第三种用法:若绑定值为其他类型,则当配置的
setValue(Object)
等于其绑定值时,input(checkbox)
标为checked(选中)。
不管使用那一种方法,生成的HTML代码都是一样的。下文是带有checkbox的部分HTML片段:
<tr> <td>Interests:</td> <td> Quidditch: <input name="preferences.interests" type="checkbox" value="Quidditch"/> <input type="hidden" value="1" name="_preferences.interests"/> Herbology: <input name="preferences.interests" type="checkbox" value="Herbology"/> <input type="hidden" value="1" name="_preferences.interests"/> Defence Against the Dark Arts: <input name="preferences.interests" type="checkbox" value="Defence Against the Dark Arts"/> <input type="hidden" value="1" name="_preferences.interests"/> </td> <td></td> </tr>
也许你注意到了每个checkbox元素后面都跟着一个隐藏区域(hidden field)。当一个HTML页面中的checkbox没有被选中时,这个checkbox的值不会在表单提交时作为HTTP请求参数发送到服务器端。这给Spring的表单数据绑定造成了麻烦。解决方法就是在每个checkbox后面加一个隐藏区域,并且每个隐藏区域的名字是在其对应的checkbox名字前加下划线("_")。这是Spring已有的惯例。这样一来,你相当于告诉Spring“这个表单中存在这样一个checkbox,我希望表单支持对象中相对应的属性和这个checkbox的状态保持一致 ”。
这个标签生成类型为radio的HTML input 标签。
这个标签的典型用法是一次声明多个标签实例,所有的标签都有相同的path属性,但是他们的value属性不同。
<tr> <td>Sex:</td> <td>Male: <form:radiobutton path="sex" value="M"/> <br/> Female: <form:radiobutton path="sex" value="F"/> </td> <td></td> </tr>
这个标签生成类型为password的HTML input标签。input标签的值和表单支持对象相应属性的值保持一致。
<tr> <td>Password:</td> <td> <form:password path="password" /> </td> </tr>
这个标签生成HTML select标签。在生成的HTML代码中,被选中的选项和表单支持对象相应属性的值保持一致。这个标签也支持嵌套的option
和options
标签。
在下面的例子中,我们假设User
可以选择自己的专业技能(多项选择):
<tr> <td>Skills:</td> <td><form:select path="skills" items="${skills}"/></td> <td></td> </tr>
如果某个User
的专业是草药学(Herbology),生成的HTML代码就会像下面这样:
<tr> <td>Skills:</td> <td><select name="skills" multiple="true"> <option value="Potions">Potions</option> <option value="Herbology" selected="true">Herbology</option> <option value="Quidditch">Quidditch</option></select></td> <td></td> </tr>
这个标签生成HTML option标签。在生成的HTML代码中,被选中的选项和表单支持对象相应属性的值保持一致。
<tr> <td>House:</td> <td> <form:select path="house"> <form:option value="Gryffindor"/> <form:option value="Hufflepuff"/> <form:option value="Ravenclaw"/> <form:option value="Slytherin"/> </form:select> </td> </tr>
如果某个User
的宿舍是Gryffindor,生成的HTML代码就会像下面这样:
<tr> <td>House:</td> <td> <select name="house"> <option value="Gryffindor" selected="true">Gryffindor</option> <option value="Hufflepuff">Hufflepuff</option> <option value="Ravenclaw">Ravenclaw</option> <option value="Slytherin">Slytherin</option> </select> </td> </tr>
译者注:这一节中的几个例子都跟《哈里波特》这本小说的内容有关。
这个标签生成一系列的HTML option标签。在生成的HTML代码中,被选中的选项和表单支持对象相应属性的值保持一致。
<tr> <td>Country:</td> <td> <form:select path="country"> <form:option value="-" label="--Please Select"/> <form:options items="${countryList}" itemValue="code" itemLabel="name"/> </form:select> </td> <td></td> </tr>
如果某个User
住在英国,生成的HTML代码就会像下面这样:
<tr> <td>Country:</td> <tr> <td>Country:</td> <td> <select name="country"> <option value="-">--Please Select</option> <option value="AT">Austria</option> <option value="UK" selected="true">United Kingdom</option> <option value="US">United States</option> </select> </td> <td></td> </tr> <td></td> </tr>
上面的这个例子同时使用了option
标签和options
标签。这两个标签生成的HTML代码是相同的,但是第一个option
标签允许你在JSP中明确声明这个标签的值只供显示使用,并不绑定到表单支持对象的属性上。
这个标签生成HTML textarea标签。
<tr> <td>Notes:</td> <td><form:textarea path="notes" rows="3" cols="20" /></td> <td><form:errors path="notes" /></td> </tr>
这个标签生成类型为hidden的HTML input标签。在生成的HTML代码中,input标签的值和表单支持对象相应属性的值保持一致。如果你需要声明一个类型为hidden的input标签,但是表单支持对象中没有对应的属性,你只能使用HTML的标签。
<form:hidden path="house" />
上面的例子表示我们需要将house的值以隐含参数的形式提交,生成的HTML代码如下:
<input name="house" type="hidden" value="Gryffindor"/>
这个标签生成类型为'span'的HTML标签,用来显示表单验证时出现的错误信息。通过这个标签,你可以访问控制器(controller)和与控制器关联的验证器(validator)产生的错误信息。
假设我们需要在表单提交时显示所有跟firstName
和lastName
有关的错误信息。我们为User
这个类编写了名为UserValidator
的验证器。
public class UserValidator implements Validator { public boolean supports(Class candidate) { return User.class.isAssignableFrom(candidate); } public void validate(Object obj, Errors errors) { ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "required", "Field is required."); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "lastName", "required", "Field is required."); } }
现在,form.jsp
是下面这个样子:
<form:form> <table> <tr> <td>First Name:</td> <td><form:input path="firstName" /></td> <%-- Show errors for firstName field --%> <td><form:errors path="firstName" /></td> </tr> <tr> <td>Last Name:</td> <td><form:input path="lastName" /></td> <%-- Show errors for lastName field --%> <td><form:errors path="lastName" /></td> </tr> <tr> <td colspan="3"> <input type="submit" value="Save Changes" /> </td> </tr> </table> </form:form>
如果我们提交表单时没有填firstHame
和lastName
这两个栏目,服务器返回的HTML页面就会像下面这样:
<form method="POST"> <table> <tr> <td>First Name:</td> <td><input name="firstName" type="text" value=""/></td> <%-- Associated errors to firstName field displayed --%> <td><span name="firstName.errors">Field is required.</span></td> </tr> <tr> <td>Last Name:</td> <td><input name="lastName" type="text" value=""/></td> <%-- Associated errors to lastName field displayed --%> <td><span name="lastName.errors">Field is required.</span></td> </tr> <tr> <td colspan="3"> <input type="submit" value="Save Changes" /> </td> </tr> </table> </form>
如果我们想显示一个页面上所有的错误信息,应该怎么办呢? errors
标签支持基本的通配符功能。
-
path="*"
- displays all errorspath="*"
: 显示所有的错误信息 -
path="lastName*"
- displays all errors associated with thelastName
fieldpath="lastName*"
: 显示所有和lastName
栏目有关的错误信息。
下面这个例子在页面的上方显示所有的错误信息,同时在表单每个栏目的旁边显示和该栏目有关的错误信息。
<form:form> <form:errors path="*" cssClass="errorBox" /> <table> <tr> <td>First Name:</td> <td><form:input path="firstName" /></td> <td><form:errors path="firstName" /></td> </tr> <tr> <td>Last Name:</td> <td><form:input path="lastName" /></td> <td><form:errors path="lastName" /></td> </tr> <tr> <td colspan="3"> <input type="submit" value="Save Changes" /> </td> </tr> </table> </form:form>
生成的HTML代码如下所示:
<form method="POST"> <span name="*.errors" class="errorBox">Field is required.<br/>Field is required.</span> <table> <tr> <td>First Name:</td> <td><input name="firstName" type="text" value=""/></td> <td><span name="firstName.errors">Field is required.</span></td> </tr> <tr> <td>Last Name:</td> <td><input name="lastName" type="text" value=""/></td> <td><span name="lastName.errors">Field is required.</span></td> </tr> <tr> <td colspan="3"> <input type="submit" value="Save Changes" /> </td> </tr> </form>
发表评论
-
调试jdk中的源码,查看jdk局部变量
2013-06-15 23:30 1052调试jdk中的源码,查看jdk局部变量 2012-04 ... -
Eclipse快捷键 10个最有用的快捷键<转>
2013-04-11 23:28 1080Eclipse中10个最有用的快捷键组合 一个Eclip ... -
Lucene 3.6 中文分词、分页查询、高亮显示等
2012-12-09 23:35 18231、准备工作 下载lucene 3.6.1 : htt ... -
Maven实战(九)——打包的技巧(转)
2012-10-12 00:41 939“打包“这个词听起 ... -
基于Maven的web工程如何配置嵌入式Jetty Server开发调试环境(转)
2012-10-12 00:28 9381、首先在web工程的POM文件里添加依赖jar包如下: ... -
轻轻松松学Solr(1)--概述及安装[转]
2012-09-18 14:59 998概述 这段时间对企 ... -
分析Netty工作流程[转]
2012-09-04 19:02 889下面以Netty中Echo的例 ... -
让eclipse在ubuntu下面好看一点
2012-03-27 10:17 921<p> </p> <h1 cla ... -
zookeeper安装和应用场合(名字,配置,锁,队列,集群管理)[转]
2012-01-12 17:59 1651安装和配置详解 本文 ... -
Jakarta-Common-BeanUtils使用笔记[转]
2012-01-10 14:13 1157Jakarta-Common-BeanUtils ... -
一个关于Java Thread wait(),notify()的实用例【转】
2012-01-07 16:05 1023///// // ProducerConsume ... -
Java基础:Java中的 assert 关键字解析【转】
2012-01-06 19:50 1064J2SE 1.4在语言上提供了 ... -
一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发[转]
2012-01-06 15:02 1269六种异常处理的陋习 ... -
如何解决HP QC(Quality Center)在Windows 7下不能工作的问题
2011-12-26 10:48 1584HP QC(Quantity Center) 是一款不错的测 ... -
JAVA读写文件,中文乱码 【转】
2011-12-19 23:43 2120最近在做HTML静态生成,需要从硬盘上把模版文件的内容读出来。 ... -
Java 6 JVM参数选项大全(中文版)【转】
2011-12-19 19:51 972Java 6 JVM参数选项大全(中文版) 作者 ... -
使用assembly plugin实现自定义打包【转】
2011-12-13 01:58 972在上一篇文章中,讨论到在对maven的机制不熟悉的情况下,为了 ... -
使用maven ant task实现非标准打包[转]
2011-12-13 01:56 1049maven很强大,但是总有些事情干起来不是得心应手,没有使用a ... -
Java日期转换SimpleDateFormat格式大全【转】
2011-12-08 20:22 131524小时制时间 显示: public clas ... -
WEB界面开发规范(转)
2011-11-02 20:06 941页面设计规则 页面命名规则 1、每个功能 ...
相关推荐
`spring3标签库`是Spring MVC框架中的强大工具,它通过`spring.tld`和`spring-form.tld`两个TLD文件,为开发者提供了丰富的自定义标签,用于处理视图层的各种任务,包括URL创建、国际化、数据绑定和表单渲染。...
本篇文章将深入探讨Spring MVC中的表单标签库,以及如何在实际项目中使用它们来创建动态、交互式的表单。 1. **表单标签库介绍** Spring MVC的表单标签库是JSP的一部分,它可以生成HTML表单元素,并且能够自动绑定...
这些标签来自 Spring 的表单标签库,从 2.0 版本开始,如果使用 JSP 和 Spring Web MVC 的话。每个标签所支持的属性集合和与其对应的 HTML 标签相同,这就让这些标签看起来很熟悉,而且用起来很直观。 Spring 的...
在Spring框架中,为了简化JSP页面上的表单处理,Spring提供了一套称为Spring表单标签库的组件。这些标签库自2.0版本起就已包含在`spring.jar`中,它们的主要目的是与Spring Web MVC框架紧密集成,以便更好地处理表单...
要使用 Spring 的表单标签库,首先需要在项目的 classpath 中添加 `spring.jar` 文件,并确保 `spring-form.tld` 文件也被正确配置。通常情况下,这些文件会在 Spring 框架安装或部署时自动被包括进来。接下来,在 ...
Spring框架的表单标签库是其Web MVC模块的一部分,自2.0版本开始引入,旨在简化JSP页面中处理表单元素的过程。这些标签与HTML标签具有相似的属性,易于理解和使用,同时遵循HTML 4.01和XHTML 1.0标准。它们与Spring ...
在使用Spring的表单标签库之前,需要在JSP页面中引入Spring的Taglib。这通常在页面的`<head>`部分完成,通过添加以下行: ```jsp <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> ``` ...
Spring框架的表单标签库是Spring Web MVC的一部分,旨在简化基于JSP的Web应用程序中表单处理和数据绑定的过程。自Spring 2.0版本起,这套标签库提供了与HTML元素相似但支持数据绑定的标签,使得开发更加方便、代码更...
在Java Web开发中,JSTL(JavaServer Pages Standard Tag Library)、Struts2和Spring都是极为重要的组件,它们各自提供了强大的功能,同时也通过标签库API增强了开发者的工作效率。这三个框架的标签库API使得代码...
本文将深入探讨Spring Form标签库的使用、功能以及它与JSTL标签库的关系。 首先,`spring-form.tld`是一个TLD(Tag Library Descriptor)文件,它是JavaServer Pages(JSP)标准中用来定义自定义标签的元数据。这个...
本压缩包"spring标签.zip"包含的文件"spring标签"可能是指Spring框架中的自定义标签库,如spring.tld,这个TLD文件(Tag Library Descriptor)是用来描述Spring标签库的元数据。 Spring框架的标签主要分为两大部分...
1. **表单标签**:在SpringMVC中,我们通常使用JSP或Thymeleaf等模板引擎来处理前端视图。对于JSP,Spring提供了一组自定义的JSTL标签,如`<form:form>`、`<form:input>`、`<form:errors>`等,这些标签简化了与...
#### 二、配置表单标签库 在使用SpringMVC表单标签之前,需要在JSP文件中声明使用的标签库。这通常通过在JSP文件的头部添加`<%@ taglib %>`指令来实现。例如: ```jsp <%@ taglib uri="http://www.springframework...
下面将详细介绍Struts标签库的使用,并结合jakarta-struts-1.2.4版本进行解析。 1. **Struts标签库介绍** Struts标签库是Apache Struts框架的一部分,提供了多种用于构建动态Web应用的预定义JSP标签。这些标签与...
Java Web标签大全主要涵盖的是在开发Java Web应用时经常使用的各种标签库,这些标签库能够帮助开发者更加便捷地实现页面的动态渲染和控制流程。在这个主题中,我们将深入探讨JSTL(JavaServer Pages Standard Tag ...
在Spring MVC框架中,数据绑定和表单标签是开发Web应用程序时...总的来说,Spring MVC的数据绑定和表单标签库为开发复杂的Web应用程序提供了强大的工具,使开发者能够专注于业务逻辑,而不是繁琐的表单处理和数据转换。
13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. radiobutton标签 13.9.6. password标签 13.9.7. select标签 13.9.8. option标签 13.9.9. ...
JSP则是经典的Java服务器页面,通过EL(表达式语言)和JSTL标签库来处理逻辑。 8. ExceptionHandler 和 HandlerExceptionResolver: 这两者都是处理控制器中未被捕获异常的方式。`@ExceptionHandler` 注解可以在控制...
全书共计12章,分别从Spring框架、模型2和MVC模式、Spring MVC介绍、控制器、数据绑定和表单标签库、传唤器和格式化、验证器、表达式语言、JSTL、国际化、上传文件、下载文件多个角度介绍了Spring MVC。除此之外,...
使用Struts1的标签库能够极大地提升开发效率,减少代码量,同时增强应用的安全性和可维护性。例如,通过bean标签库,我们可以方便地在JSP页面上操作属性,实现国际化;通过logic标签库,我们可以进行逻辑控制,避免...