- 浏览: 246184 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
xiaopengpo:
无论如何要谢谢你,试了很多办法,你的这个才是终极解决办 ...
jsp和Servlet之间传值出现乱码的解决方案 -
leilei12181218:
芳姐,我过来溜达溜达,,,嘿嘿。。。
Spring的xml配置bean文件原理-[Java反射机制] -
Abmao:
mark!
java web开发 高并发处理 -
wzf7065:
mikey_5 写道没办法啊,这个是全局问题,买个防毒口罩吧, ...
北京的空气污染这么严重,我是否要逃离? -
mikey_5:
没办法啊,这个是全局问题,买个防毒口罩吧,朋友
北京的空气污染这么严重,我是否要逃离?
SpringMVC表单标签简介
在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容。下面将对这些标签一一介绍。
在正式介绍SpringMVC的表单标签之前,我们需要先在JSP中声明使用的标签,具体做法是在JSP文件的顶部加入以下指令:
Jsp代码
1.<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
1.1 form标签
使用Spring的form标签主要有两个作用,第一是它会自动的绑定来自Model中的一个属性值到当前form对应的实体对象,默认是command属性,这样我们就可以在form表单体里面方便的使用该对象的属性了;第二是它支持我们在提交表单的时候使用除GET和POST之外的其他方法进行提交,包括DELETE和PUT等。
1.1.1 支持绑定表单对象
我们先来看如下使用form标签的一个示例:
Jsp代码
1.<form:form action="formTag/form.do" method="post">
2. <table>
3. <tr>
4. <td>Name:</td><td><form:input path="name"/></td>
5. </tr>
6. <tr>
7. <td>Age:</td><td><form:input path="age"/></td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
这个时候如果Model中存在一个属性名称为command的javaBean,而且该javaBean拥有属性name和age的时候,在渲染上面的代码时就会取command的对应属性值赋给对应标签的值。如在上面的代码中,假设Model中存在一个属性名称为command的javaBean,且它的name和age属性分别为“Zhangsan”和“36”时,那么它在渲染时就会生成如下一段代码:
Html代码
1.<form id="command" action="formTag/form.do" method="post">
2. <table>
3. <tr>
4. <td>Name:</td><td><input id="name" name="name" type="text" value="ZhangSan"/></td>
5. </tr>
6. <tr>
7. <td>Age:</td><td><input id="age" name="age" type="text" value="36"/></td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form>
从上面生成的代码中,我们可以看出,当没有指定form标签的id时它会自动获取该form标签绑定的Model中对应属性名称作为id,而对于input标签在没有指定id的情况下它会自动获取path指定的属性作为id和name。
我们指定form默认自动绑定的是Model的command属性值,那么当我的form对象对应的属性名称不是command的时候,应该怎么办呢?对于这种情况,Spring给我们提供了一个commandName属性,我们可以通过该属性来指定我们将使用Model中的哪个属性作为form需要绑定的command对象。除了commandName属性外,指定modelAttribute属性也可以达到相同的效果。这里假设上面代码中我们存放在Model中的是user对象而不是默认的command对象,那么我们的代码就可以如下定义了:
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>Name:</td><td><form:input path="name"/></td>
5. </tr>
6. <tr>
7. <td>Age:</td><td><form:input path="age"/></td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
1.1.2 支持全部的Http请求方法
Jsp代码
1.<form:form action="formTag/form.do" method="delete" modelAttribute="user">
2. <table>
3. <tr>
4. <td>Name:</td><td><form:input path="name"/></td>
5. </tr>
6. <tr>
7. <td>Age:</td><td><form:input path="age"/></td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
在上面代码中我们设定了该form的提交方法是delete,这样在后台我们就可以给对应的请求方法的RequestMapping加上method为RequestMethod.DELETE的限制。我们来看一下上面的代码在进行渲染的时候会生成怎样的Html代码,其生成的代码如下所示:
Html代码
1.<form id="user" action="formTag/form.do" method="post">
2. <input type="hidden" name="_method" value="delete"/>
3. <table>
4. <tr>
5. <td>Name:</td><td><input id="name" name="name" type="text" value="ZhangSan"/></td>
6. </tr>
7. <tr>
8. <td>Age:</td><td><input id="age" name="age" type="text" value="36"/></td>
9. </tr>
10. <tr>
11. <td colspan="2"><input type="submit" value="提交"/></td>
12. </tr>
13. </table>
14.</form>
从它生成的代码我们可以看出,Spring在实现除GET和POST之外的请求方法时,还是使用的POST方法进行请求,然后给表单加上了一个隐藏域,用以表示真正的请求方法,这个隐藏域的名称默认是“_method”。上面这样定义之后是不是就意味着我们可以以delete方式访问到“formTag/form.do”了呢?答案是不行的。这样定义我们只是多加了一个用以表示请求方法的隐藏域而已,实际的请求方式还是POST。Spring为我们提供了一个Filter——HiddenHttpMethodFilter,通过这个Filter我们可以把以POST方式传递过来的表示实际请求方式的参数转换为对应的真正的Http请求方法。所以这个时候我们还需要在web.xml中加上如下代码:
Xml代码
1.<filter>
2. <filter-name>hiddenHttpMethodFilter</filter-name>
3. <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
4.</filter>
5.<filter-mapping>
6. <filter-name>hiddenHttpMethodFilter</filter-name>
7. <url-pattern>/*</url-pattern>
8.</filter-mapping>
注意:HiddenHttpMethodFilter只能对以POST方式进行传递的表示请求方式的隐藏域转换为真正的Http请求方式。当我们直接在form:form标签的method中使用除GET和POST方法以外的其他方法时,Spring会自动生成以POST方式进行传递的表单以及对应的隐藏域。所以当我们需要手动的设置表示请求方法的隐藏域时,我们就需要指定表单的请求方式为POST,为GET将不会生效。
Jsp代码
1.<form:form action="formTag/form.do" method="post" modelAttribute="user">
2. <input type="hidden" name="_method" value="head"/>
3. <table>
4. <tr>
5. <td>Name:</td><td><form:input path="name"/></td>
6. </tr>
7. <tr>
8. <td>Age:</td><td><form:input path="age"/></td>
9. </tr>
10. <tr>
11. <td colspan="2"><input type="submit" value="提交"/></td>
12. </tr>
13. </table>
14.</form:form>
上面代码就是一个手动定义请求方式的隐藏域的示例。这里表示请求方式的隐藏域的名称默认是“_method”,如果不想使用这个默认值的话,我们也可以通过form:form标签的methodParam属性来指定。如下面这个示例:
Jsp代码
1.<form:form action="formTag/form.do" method="post" methodParam="requestMethod" modelAttribute="user">
2. <input type="hidden" name="requestMethod" value="head"/>
3. <table>
4. <tr>
5. <td>Name:</td><td><form:input path="name"/></td>
6. </tr>
7. <tr>
8. <td>Age:</td><td><form:input path="age"/></td>
9. </tr>
10. <tr>
11. <td colspan="2"><input type="submit" value="提交"/></td>
12. </tr>
13. </table>
14.</form:form>
同时我们也要告诉HiddenHttpMethodFilter我们是使用哪个表单参数作为methodParam,所以我们需要在配置HiddenHttpMethodFilter的时候指明methodParam对应的值。
Xml代码
1.<filter>
2. <filter-name>hiddenHttpMethodFilter</filter-name>
3. <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
4. <init-param>
5. <param-name>methodParam</param-name>
6. <param-value>requestMethod</param-value>
7. </init-param>
8.</filter>
9.<filter-mapping>
10. <filter-name>hiddenHttpMethodFilter</filter-name>
11. <url-pattern>/*</url-pattern>
12.</filter-mapping>
另外需要注意的是在有Multipart请求处理的时候HiddenHttpMethodFilter需要在Multipart处理之后执行,因为在处理Multipart时需要从POST请求体中获取参数。所以我们通常会在HiddenHttpMethodFilter之前设立一个MultipartFilter。MultipartFilter默认会去寻找一个名称为filterMultipartResolver的MultipartResolver bean对象来对当前的请求进行封装。所以当你定义的MultipartResolver的名称不为filterMultipartResolver的时候就需要在定义MultipartFilter的时候通过参数multipartResolverBeanName来指定。
Xml代码
1.<filter>
2. <filter-name>multipartFilter</filter-name>
3. <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
4. <init-param>
5. <param-name>multipartResolverBeanName</param-name>
6. <param-value>multipartResolver</param-value>
7. </init-param>
8.</filter>
9.<filter-mapping>
10. <filter-name>multipartFilter</filter-name>
11. <url-pattern>/*</url-pattern>
12.</filter-mapping>
13.
14.<filter>
15. <filter-name>hiddenHttpMethodFilter</filter-name>
16. <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
17. <init-param>
18. <param-name>methodParam</param-name>
19. <param-value>requestMethod</param-value>
20. </init-param>
21.</filter>
22.<filter-mapping>
23. <filter-name>hiddenHttpMethodFilter</filter-name>
24. <url-pattern>/*</url-pattern>
25.</filter-mapping>
1.2 input标签
SpringMVC的input标签会被渲染为一个type为text的普通Html input标签。使用SpringMVC的input标签的唯一作用就是它能绑定表单数据。SpringMVC表单标签最大的好处就是它支持数据绑定,当我们的表单标签不需要绑定的数据的时候,我们应该使用普通的Html标签。关于input标签绑定表单数据的方法已经在介绍form标签的时候顺带介绍过了,这里就不再过多的赘述了。
Jsp代码
1.<form:form action="formTag/form.do" method="head" modelAttribute="user" methodParam="requestMethod">
2. <table>
3. <tr>
4. <td>Name:</td><td><form:input path="name"/></td>
5. </tr>
6. <tr>
7. <td>Age:</td><td><form:input path="age"/></td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
1.3 hidden标签
hidden标签会被渲染为一个type为hidden的普通Html input标签。用法跟input标签一样,也能绑定表单数据,只是它生成的是一个隐藏域。
1.4 checkbox标签
checkbox标签会被渲染为一个type为checkbox的普通HTML input标签。checkbox标签也是支持绑定数据的。我们知道checkbox就是一个复选框,有选中和不选中两种状态,那么我们在使用checkbox标签的时候是如何来设定它的状态的呢?checkbox标签的选中与否状态是根据它绑定的值来判断的。
1.4.1 绑定boolean数据
当checkbox绑定的是一个boolean数据的时候,那么checkbox的状态跟该boolean数据的状态是一样的,即true对应选中,false对应不选中。
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>Male:</td><td><form:checkbox path="male"/></td>
5. </tr>
6. <tr>
7. <td colspan="2"><input type="submit" value="提交"/></td>
8. </tr>
9. </table>
10.</form:form>
看上面这段代码,这个时候假设我们在渲染该视图之前往ModelMap中添加了一个user属性,并且该user对象有一个类型为boolean的属性male,那么这个时候如果male属性为true则Male那一栏的复选框将会被选中。
1.4.2 绑定列表数据
这里的列表数据包括数组、List和Set。下面将以List为例讲一下checkbox是如何根据绑定的列表数据来设定选中状态的。现在假设有一个类User,其有一个类型为List的属性roles,如下所示:
Java代码
1.public class User {
2.
3. private List<String> roles;
4.
5. public List<String> getRoles() {
6. return roles;
7. }
8.
9. public void setRoles(List<String> roles) {
10. this.roles = roles;
11. }
12.}
那么当我们需要展现该User是否拥有某一个Role的时候,我们可以使用checkbox标签来绑定roles数据进行展现。当checkbox标签的value在我们绑定的列表数据中存在的时候该checkbox将为选中状态。来看下面一段代码:
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>Roles:</td>
5. <td>
6. <form:checkbox path="roles" value="role1"/>Role1<br/>
7. <form:checkbox path="roles" value="role2"/>Role2<br/>
8. <form:checkbox path="roles" value="role3"/>Role3
9. </td>
10. </tr>
11. </table>
12.</form:form>
就上面代码而言就是当User拥有role1的时候对应的<form:checkbox path="roles" value="role1"/>就会为选中状态,也就是说roles列表中包含role1的时候该checkbox就会为选中状态。
1.4.3 绑定一个Object数据
checkbox还支持绑定数据类型为Object的数据,这种情况下Spring会拿所绑定对象数据的toString结果跟当前checkbox的value进行比较,如果能够进行匹配则该checkbox将为选中状态。看这样一个例子,有一个User类代码如下:
Java代码
1.public class User {
2.
3. private Blog blog;
4.
5. public Blog getBlog() {
6. return blog;
7. }
8.
9. public void setBlog(Blog blog) {
10. this.blog = blog;
11. }
12.}
Blog类的代码如下:
Java代码
1.public class Blog {
2.
3. public String toString() {
4. return "HelloWorld";
5. }
6.
7.}
我们可以看到Blog类的toString方法已经被写死为“HelloWorld”了。这个时候假设我们往ModelMap中放了一个user对象,而且给该user对象设定了一个blog属性,那么当我们使用该ModelMap对象渲染如下视图代码时,checkbox标签的选中状态是怎样的呢?根据前面描述的当checkbox标签绑定的是一个Object对象的时候我们会拿该Object对象的toString和checkbox的value值进行比较,如果匹配则当前checkbox为选中状态,我们知道这里的checkbox将为选中状态。
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>HelloWorld:</td>
5. <td>
6. <form:checkbox path="blog" value="HelloWorld"/>
7. </td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
1.5 Checkboxes标签
相对于一个checkbox标签只能生成一个对应的复选框而言,一个checkboxes标签将根据其绑定的数据生成N个复选框。checkboxes绑定的数据可以是数组、集合和Map。在使用checkboxes时我们有两个属性是必须指定的,一个是path,另一个是items。Items表示当前要用来展现的项有哪些,而path所绑定的表单对象的属性表示当前表单对象拥有的项,即在items所展现的所有项中表单对象拥有的项会被设定为选中状态。先来看以下一段代码:
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>Roles:</td>
5. <td>
6. <form:checkboxes path="roles" items="${roleList}"/>
7. </td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
上面的JSP视图对应着如下的处理器方法:
Java代码
1.@RequestMapping(value="form", method=RequestMethod.GET)
2.public String formTag(Map<String, Object> map) {
3. User user = new User();
4. List<String> roles = new ArrayList<String>();
5. roles.add("role1");
6. roles.add("role3");
7. user.setRoles(roles);
8. List<String> roleList = new ArrayList<String>();
9. roleList.add("role1");
10. roleList.add("role2");
11. roleList.add("role3");
12. map.put("user", user);
13. map.put("roleList", roleList);
14. return "formTag/form";
15.}
从以上代码中我们可以看到我们放在ModelMap中的roleList对象有三个元素,分别是role1、role2和role3,而我们的表单对象User的roles属性只拥有两个元素,分别是role1和role3,,所以当我们访问该处理器方法返回如上所示的视图页面时,我们要展现的复选框项是roleList,也就是role1、role2和role3,而我们表单对象只拥有role1和role3,所以在页面进行渲染的时候会展示3个复选框项,但只有role1和role3会被设定为选中状态。
上面介绍的这种情况是使用List作为展现复选框项的数据源,这种情况我们已经看到了它所呈现出来的标签Label和它的值是一样的。使用Array和Set作为数据源也是这种情况。那么如果要让checkboxes呈现出来的Label和实际上送的value不同的话应该怎么做呢?这个时候我们就可以使用Map作为数据源了。使用Map作为checkboxes的items属性的数据源时Key将作为真正的复选框的value,而Map的value将作为Label进行展示。当使用Map作为checkboxes的items属性的数据源时我们绑定的表单对象属性的类型可以是Array、集合和Map,这种情况就是判断items Map中是否含有对应的key来决定当前的复选框是否处于选中状态。我们来看以下一个处理器方法以及其对应的视图代码。
处理器方法:
Java代码
1.@RequestMapping(value="form", method=RequestMethod.GET)
2.public String formTag(Map<String, Object> map) {
3. User user = new User();
4. List<String> roles = new ArrayList<String>();
5. roles.add("role1");
6. roles.add("role3");
7. user.setRoles(roles);
8. Map<String, String> roleMap = new HashMap<String, String>();
9. roleMap.put("role1", "角色1");
10. roleMap.put("role2", "角色2");
11. roleMap.put("role3", "角色3");
12. map.put("user", user);
13. map.put("roleMap", roleMap);
14. return "formTag/form";
15.}
对应的视图代码:
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>Roles:</td>
5. <td>
6. <form:checkboxes path="roles" items="${roleMap}"/>
7. </td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
这个时候我们知道会呈现出3个复选框,而checkboxes绑定的表单对象user的roles属性是一个集合对象,其包含的两个元素都能在checkboxes的items数据源中找到对应的Key,所以以这两个元素为value的checkbox将处于选中状态。效果如下:
当我们使用Array或者集合作为数据源,且里面的元素都是一个一个POJO时,我们还可以使用checkboxes标签的itemLabel和itemValue属性来表示使用数组或者集合中元素对象的哪一个属性作为需要呈现的单选框的label和value。
1.6 radiobutton标签
radiobutton标签会被渲染为一个type为radio的普通HTML input标签。radiobutton标签也是可以绑定数据的。以下是一个radiobutton的简单应用示例:
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>性别:</td>
5. <td>
6. <form:radiobutton path="sex" value="1"/>男
7. <form:radiobutton path="sex" value="0"/>女
8. </td>
9. </tr>
10. <tr>
11. <td colspan="2"><input type="submit" value="提交"/></td>
12. </tr>
13. </table>
14.</form:form>
在上面代码中我们的radiobutton标签都是绑定了表单对象user的sex属性,当sex为1的时候就代表性别为男,上面性别为男的那一行就会被选中,当sex为0的时候就代表性别为女,上面性别为女的那一行就会被选中。
1.7 radiobuttons标签
radiobuttons标签跟radiobutton标签的区别如同checkbox标签对checkboxes标签的区别。使用radiobuttons标签的时候将生成多个单选按钮。使用radiobuttons有两个属性也是我们必须指定的,一个是path属性,表示绑定的表单对象对应的属性,另一个是items属性,表示用于生成单选按钮的数据源。跟checkboxes一样,radiobuttons的items属性和path属性都可以是Array、集合或者是Map。现在我们假设user在篮球、足球、乒乓球、羽毛球和排球这5种运动中选择一种作为自己最喜欢的球类运动。处理器方法和返回的对应的视图代码如下:
Java代码
1.@RequestMapping(value="form", method=RequestMethod.GET)
2.public String formTag(Map<String, Object> map) {
3. User user = new User();
4. user.setFavoriteBall(4);//设置我最喜爱的球类运动是4羽毛球
5. Map<Integer, String> ballMap = new HashMap<Integer, String>();
6. ballMap.put(1, "篮球");
7. ballMap.put(2, "足球");
8. ballMap.put(3, "乒乓球");
9. ballMap.put(4, "羽毛球");
10. ballMap.put(5, "排球");
11. map.put("user", user);
12. map.put("ballMap", ballMap);
13. return "formTag/form";
14.}
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>最喜欢的球类:</td>
5. <td>
6. <form:radiobuttons path="favoriteBall" items="${ballMap}" delimiter=" "/>
7. </td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
在上述代码中我们可以看到我们使用了radiobuttons的delimiter属性,该属性表示进行展示的radiobutton之间的分隔符。这里用的是一个空格。结果页面如下所示:
1.8 password标签
password标签将会被渲染为一个type为password的普通HTML input标签。
1.9 select标签
select标签将会被渲染为一个普通的HTML select标签。这里还拿前面的user最喜欢的球类运动来做示例,有如下这样一个处理器方法和对应的视图页面:
Java代码
1.@RequestMapping(value="form", method=RequestMethod.GET)
2.public String formTag(Map<String, Object> map) {
3. User user = new User();
4. user.setFavoriteBall(4);//设置我最喜爱的球类运动是4羽毛球
5. Map<Integer, String> ballMap = new HashMap<Integer, String>();
6. ballMap.put(1, "篮球");
7. ballMap.put(2, "足球");
8. ballMap.put(3, "乒乓球");
9. ballMap.put(4, "羽毛球");
10. ballMap.put(5, "排球");
11. map.put("user", user);
12. map.put("ballMap", ballMap);
13. return "formTag/form";
14.}
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>最喜欢的运动:</td>
5. <td>
6. <form:select path="favoriteBall" items="${ballMap}"/>
7. </td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
这个时候会渲染出如下结果:
从上面示例我们可以看出,我们通过items属性给select标签指定了一个数据源,并且绑定了表单对象user的favoriteBall属性。Items属性是用于指定当前select的所有可选项的,但是它对于select标签而言不是必须的,因为我们还可以手动的在select标签中间加上option标签来指定select可选的option。Select标签支持的items属性的数据类型可以是Array、Collection和Map,当数据类型为Array或Collection时且其中的元素为一个POJO时,我们可以通过属性itemLabel和itemValue来指定将用于呈现的option Label和Value,其他情况下Array和Collection数据源中的元素将既作为可选项option的value又作为它的Label。当items的数据类型为Map时,Map的key将作为可选项option的value,而Map的value将作为option的Label标签。
1.10 option标签
option标签会被渲染为一个普通的HTML option标签。当一个SpringMVC select标签没有通过items属性指定自己的数据源的时候,我们就可以在select标签中通过普通HTML option标签或者SpringMVC option标签来指定可以选择的项。
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>最喜欢的运动:</td>
5. <td>
6. <form:select path="favoriteBall">
7. <option>请选择</option>
8. <form:option value="1">篮球</form:option>
9. <option value="4">羽毛球</option>
10. </form:select>
11. </td>
12. </tr>
13. <tr>
14. <td colspan="2"><input type="submit" value="提交"/></td>
15. </tr>
16. </table>
17.</form:form>
我们可以看到在上面代码中我们是没有指定select标签的数据源的,而是通过在select标签体里面指定普通HTML option标签和SpringMVC option标签来指定可选项。其渲染的效果如下:
转自:http://blog.csdn.net/dyllove98/article/details/8590642
在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容。下面将对这些标签一一介绍。
在正式介绍SpringMVC的表单标签之前,我们需要先在JSP中声明使用的标签,具体做法是在JSP文件的顶部加入以下指令:
Jsp代码
1.<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
1.1 form标签
使用Spring的form标签主要有两个作用,第一是它会自动的绑定来自Model中的一个属性值到当前form对应的实体对象,默认是command属性,这样我们就可以在form表单体里面方便的使用该对象的属性了;第二是它支持我们在提交表单的时候使用除GET和POST之外的其他方法进行提交,包括DELETE和PUT等。
1.1.1 支持绑定表单对象
我们先来看如下使用form标签的一个示例:
Jsp代码
1.<form:form action="formTag/form.do" method="post">
2. <table>
3. <tr>
4. <td>Name:</td><td><form:input path="name"/></td>
5. </tr>
6. <tr>
7. <td>Age:</td><td><form:input path="age"/></td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
这个时候如果Model中存在一个属性名称为command的javaBean,而且该javaBean拥有属性name和age的时候,在渲染上面的代码时就会取command的对应属性值赋给对应标签的值。如在上面的代码中,假设Model中存在一个属性名称为command的javaBean,且它的name和age属性分别为“Zhangsan”和“36”时,那么它在渲染时就会生成如下一段代码:
Html代码
1.<form id="command" action="formTag/form.do" method="post">
2. <table>
3. <tr>
4. <td>Name:</td><td><input id="name" name="name" type="text" value="ZhangSan"/></td>
5. </tr>
6. <tr>
7. <td>Age:</td><td><input id="age" name="age" type="text" value="36"/></td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form>
从上面生成的代码中,我们可以看出,当没有指定form标签的id时它会自动获取该form标签绑定的Model中对应属性名称作为id,而对于input标签在没有指定id的情况下它会自动获取path指定的属性作为id和name。
我们指定form默认自动绑定的是Model的command属性值,那么当我的form对象对应的属性名称不是command的时候,应该怎么办呢?对于这种情况,Spring给我们提供了一个commandName属性,我们可以通过该属性来指定我们将使用Model中的哪个属性作为form需要绑定的command对象。除了commandName属性外,指定modelAttribute属性也可以达到相同的效果。这里假设上面代码中我们存放在Model中的是user对象而不是默认的command对象,那么我们的代码就可以如下定义了:
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>Name:</td><td><form:input path="name"/></td>
5. </tr>
6. <tr>
7. <td>Age:</td><td><form:input path="age"/></td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
1.1.2 支持全部的Http请求方法
Jsp代码
1.<form:form action="formTag/form.do" method="delete" modelAttribute="user">
2. <table>
3. <tr>
4. <td>Name:</td><td><form:input path="name"/></td>
5. </tr>
6. <tr>
7. <td>Age:</td><td><form:input path="age"/></td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
在上面代码中我们设定了该form的提交方法是delete,这样在后台我们就可以给对应的请求方法的RequestMapping加上method为RequestMethod.DELETE的限制。我们来看一下上面的代码在进行渲染的时候会生成怎样的Html代码,其生成的代码如下所示:
Html代码
1.<form id="user" action="formTag/form.do" method="post">
2. <input type="hidden" name="_method" value="delete"/>
3. <table>
4. <tr>
5. <td>Name:</td><td><input id="name" name="name" type="text" value="ZhangSan"/></td>
6. </tr>
7. <tr>
8. <td>Age:</td><td><input id="age" name="age" type="text" value="36"/></td>
9. </tr>
10. <tr>
11. <td colspan="2"><input type="submit" value="提交"/></td>
12. </tr>
13. </table>
14.</form>
从它生成的代码我们可以看出,Spring在实现除GET和POST之外的请求方法时,还是使用的POST方法进行请求,然后给表单加上了一个隐藏域,用以表示真正的请求方法,这个隐藏域的名称默认是“_method”。上面这样定义之后是不是就意味着我们可以以delete方式访问到“formTag/form.do”了呢?答案是不行的。这样定义我们只是多加了一个用以表示请求方法的隐藏域而已,实际的请求方式还是POST。Spring为我们提供了一个Filter——HiddenHttpMethodFilter,通过这个Filter我们可以把以POST方式传递过来的表示实际请求方式的参数转换为对应的真正的Http请求方法。所以这个时候我们还需要在web.xml中加上如下代码:
Xml代码
1.<filter>
2. <filter-name>hiddenHttpMethodFilter</filter-name>
3. <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
4.</filter>
5.<filter-mapping>
6. <filter-name>hiddenHttpMethodFilter</filter-name>
7. <url-pattern>/*</url-pattern>
8.</filter-mapping>
注意:HiddenHttpMethodFilter只能对以POST方式进行传递的表示请求方式的隐藏域转换为真正的Http请求方式。当我们直接在form:form标签的method中使用除GET和POST方法以外的其他方法时,Spring会自动生成以POST方式进行传递的表单以及对应的隐藏域。所以当我们需要手动的设置表示请求方法的隐藏域时,我们就需要指定表单的请求方式为POST,为GET将不会生效。
Jsp代码
1.<form:form action="formTag/form.do" method="post" modelAttribute="user">
2. <input type="hidden" name="_method" value="head"/>
3. <table>
4. <tr>
5. <td>Name:</td><td><form:input path="name"/></td>
6. </tr>
7. <tr>
8. <td>Age:</td><td><form:input path="age"/></td>
9. </tr>
10. <tr>
11. <td colspan="2"><input type="submit" value="提交"/></td>
12. </tr>
13. </table>
14.</form:form>
上面代码就是一个手动定义请求方式的隐藏域的示例。这里表示请求方式的隐藏域的名称默认是“_method”,如果不想使用这个默认值的话,我们也可以通过form:form标签的methodParam属性来指定。如下面这个示例:
Jsp代码
1.<form:form action="formTag/form.do" method="post" methodParam="requestMethod" modelAttribute="user">
2. <input type="hidden" name="requestMethod" value="head"/>
3. <table>
4. <tr>
5. <td>Name:</td><td><form:input path="name"/></td>
6. </tr>
7. <tr>
8. <td>Age:</td><td><form:input path="age"/></td>
9. </tr>
10. <tr>
11. <td colspan="2"><input type="submit" value="提交"/></td>
12. </tr>
13. </table>
14.</form:form>
同时我们也要告诉HiddenHttpMethodFilter我们是使用哪个表单参数作为methodParam,所以我们需要在配置HiddenHttpMethodFilter的时候指明methodParam对应的值。
Xml代码
1.<filter>
2. <filter-name>hiddenHttpMethodFilter</filter-name>
3. <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
4. <init-param>
5. <param-name>methodParam</param-name>
6. <param-value>requestMethod</param-value>
7. </init-param>
8.</filter>
9.<filter-mapping>
10. <filter-name>hiddenHttpMethodFilter</filter-name>
11. <url-pattern>/*</url-pattern>
12.</filter-mapping>
另外需要注意的是在有Multipart请求处理的时候HiddenHttpMethodFilter需要在Multipart处理之后执行,因为在处理Multipart时需要从POST请求体中获取参数。所以我们通常会在HiddenHttpMethodFilter之前设立一个MultipartFilter。MultipartFilter默认会去寻找一个名称为filterMultipartResolver的MultipartResolver bean对象来对当前的请求进行封装。所以当你定义的MultipartResolver的名称不为filterMultipartResolver的时候就需要在定义MultipartFilter的时候通过参数multipartResolverBeanName来指定。
Xml代码
1.<filter>
2. <filter-name>multipartFilter</filter-name>
3. <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
4. <init-param>
5. <param-name>multipartResolverBeanName</param-name>
6. <param-value>multipartResolver</param-value>
7. </init-param>
8.</filter>
9.<filter-mapping>
10. <filter-name>multipartFilter</filter-name>
11. <url-pattern>/*</url-pattern>
12.</filter-mapping>
13.
14.<filter>
15. <filter-name>hiddenHttpMethodFilter</filter-name>
16. <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
17. <init-param>
18. <param-name>methodParam</param-name>
19. <param-value>requestMethod</param-value>
20. </init-param>
21.</filter>
22.<filter-mapping>
23. <filter-name>hiddenHttpMethodFilter</filter-name>
24. <url-pattern>/*</url-pattern>
25.</filter-mapping>
1.2 input标签
SpringMVC的input标签会被渲染为一个type为text的普通Html input标签。使用SpringMVC的input标签的唯一作用就是它能绑定表单数据。SpringMVC表单标签最大的好处就是它支持数据绑定,当我们的表单标签不需要绑定的数据的时候,我们应该使用普通的Html标签。关于input标签绑定表单数据的方法已经在介绍form标签的时候顺带介绍过了,这里就不再过多的赘述了。
Jsp代码
1.<form:form action="formTag/form.do" method="head" modelAttribute="user" methodParam="requestMethod">
2. <table>
3. <tr>
4. <td>Name:</td><td><form:input path="name"/></td>
5. </tr>
6. <tr>
7. <td>Age:</td><td><form:input path="age"/></td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
1.3 hidden标签
hidden标签会被渲染为一个type为hidden的普通Html input标签。用法跟input标签一样,也能绑定表单数据,只是它生成的是一个隐藏域。
1.4 checkbox标签
checkbox标签会被渲染为一个type为checkbox的普通HTML input标签。checkbox标签也是支持绑定数据的。我们知道checkbox就是一个复选框,有选中和不选中两种状态,那么我们在使用checkbox标签的时候是如何来设定它的状态的呢?checkbox标签的选中与否状态是根据它绑定的值来判断的。
1.4.1 绑定boolean数据
当checkbox绑定的是一个boolean数据的时候,那么checkbox的状态跟该boolean数据的状态是一样的,即true对应选中,false对应不选中。
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>Male:</td><td><form:checkbox path="male"/></td>
5. </tr>
6. <tr>
7. <td colspan="2"><input type="submit" value="提交"/></td>
8. </tr>
9. </table>
10.</form:form>
看上面这段代码,这个时候假设我们在渲染该视图之前往ModelMap中添加了一个user属性,并且该user对象有一个类型为boolean的属性male,那么这个时候如果male属性为true则Male那一栏的复选框将会被选中。
1.4.2 绑定列表数据
这里的列表数据包括数组、List和Set。下面将以List为例讲一下checkbox是如何根据绑定的列表数据来设定选中状态的。现在假设有一个类User,其有一个类型为List的属性roles,如下所示:
Java代码
1.public class User {
2.
3. private List<String> roles;
4.
5. public List<String> getRoles() {
6. return roles;
7. }
8.
9. public void setRoles(List<String> roles) {
10. this.roles = roles;
11. }
12.}
那么当我们需要展现该User是否拥有某一个Role的时候,我们可以使用checkbox标签来绑定roles数据进行展现。当checkbox标签的value在我们绑定的列表数据中存在的时候该checkbox将为选中状态。来看下面一段代码:
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>Roles:</td>
5. <td>
6. <form:checkbox path="roles" value="role1"/>Role1<br/>
7. <form:checkbox path="roles" value="role2"/>Role2<br/>
8. <form:checkbox path="roles" value="role3"/>Role3
9. </td>
10. </tr>
11. </table>
12.</form:form>
就上面代码而言就是当User拥有role1的时候对应的<form:checkbox path="roles" value="role1"/>就会为选中状态,也就是说roles列表中包含role1的时候该checkbox就会为选中状态。
1.4.3 绑定一个Object数据
checkbox还支持绑定数据类型为Object的数据,这种情况下Spring会拿所绑定对象数据的toString结果跟当前checkbox的value进行比较,如果能够进行匹配则该checkbox将为选中状态。看这样一个例子,有一个User类代码如下:
Java代码
1.public class User {
2.
3. private Blog blog;
4.
5. public Blog getBlog() {
6. return blog;
7. }
8.
9. public void setBlog(Blog blog) {
10. this.blog = blog;
11. }
12.}
Blog类的代码如下:
Java代码
1.public class Blog {
2.
3. public String toString() {
4. return "HelloWorld";
5. }
6.
7.}
我们可以看到Blog类的toString方法已经被写死为“HelloWorld”了。这个时候假设我们往ModelMap中放了一个user对象,而且给该user对象设定了一个blog属性,那么当我们使用该ModelMap对象渲染如下视图代码时,checkbox标签的选中状态是怎样的呢?根据前面描述的当checkbox标签绑定的是一个Object对象的时候我们会拿该Object对象的toString和checkbox的value值进行比较,如果匹配则当前checkbox为选中状态,我们知道这里的checkbox将为选中状态。
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>HelloWorld:</td>
5. <td>
6. <form:checkbox path="blog" value="HelloWorld"/>
7. </td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
1.5 Checkboxes标签
相对于一个checkbox标签只能生成一个对应的复选框而言,一个checkboxes标签将根据其绑定的数据生成N个复选框。checkboxes绑定的数据可以是数组、集合和Map。在使用checkboxes时我们有两个属性是必须指定的,一个是path,另一个是items。Items表示当前要用来展现的项有哪些,而path所绑定的表单对象的属性表示当前表单对象拥有的项,即在items所展现的所有项中表单对象拥有的项会被设定为选中状态。先来看以下一段代码:
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>Roles:</td>
5. <td>
6. <form:checkboxes path="roles" items="${roleList}"/>
7. </td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
上面的JSP视图对应着如下的处理器方法:
Java代码
1.@RequestMapping(value="form", method=RequestMethod.GET)
2.public String formTag(Map<String, Object> map) {
3. User user = new User();
4. List<String> roles = new ArrayList<String>();
5. roles.add("role1");
6. roles.add("role3");
7. user.setRoles(roles);
8. List<String> roleList = new ArrayList<String>();
9. roleList.add("role1");
10. roleList.add("role2");
11. roleList.add("role3");
12. map.put("user", user);
13. map.put("roleList", roleList);
14. return "formTag/form";
15.}
从以上代码中我们可以看到我们放在ModelMap中的roleList对象有三个元素,分别是role1、role2和role3,而我们的表单对象User的roles属性只拥有两个元素,分别是role1和role3,,所以当我们访问该处理器方法返回如上所示的视图页面时,我们要展现的复选框项是roleList,也就是role1、role2和role3,而我们表单对象只拥有role1和role3,所以在页面进行渲染的时候会展示3个复选框项,但只有role1和role3会被设定为选中状态。
上面介绍的这种情况是使用List作为展现复选框项的数据源,这种情况我们已经看到了它所呈现出来的标签Label和它的值是一样的。使用Array和Set作为数据源也是这种情况。那么如果要让checkboxes呈现出来的Label和实际上送的value不同的话应该怎么做呢?这个时候我们就可以使用Map作为数据源了。使用Map作为checkboxes的items属性的数据源时Key将作为真正的复选框的value,而Map的value将作为Label进行展示。当使用Map作为checkboxes的items属性的数据源时我们绑定的表单对象属性的类型可以是Array、集合和Map,这种情况就是判断items Map中是否含有对应的key来决定当前的复选框是否处于选中状态。我们来看以下一个处理器方法以及其对应的视图代码。
处理器方法:
Java代码
1.@RequestMapping(value="form", method=RequestMethod.GET)
2.public String formTag(Map<String, Object> map) {
3. User user = new User();
4. List<String> roles = new ArrayList<String>();
5. roles.add("role1");
6. roles.add("role3");
7. user.setRoles(roles);
8. Map<String, String> roleMap = new HashMap<String, String>();
9. roleMap.put("role1", "角色1");
10. roleMap.put("role2", "角色2");
11. roleMap.put("role3", "角色3");
12. map.put("user", user);
13. map.put("roleMap", roleMap);
14. return "formTag/form";
15.}
对应的视图代码:
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>Roles:</td>
5. <td>
6. <form:checkboxes path="roles" items="${roleMap}"/>
7. </td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
这个时候我们知道会呈现出3个复选框,而checkboxes绑定的表单对象user的roles属性是一个集合对象,其包含的两个元素都能在checkboxes的items数据源中找到对应的Key,所以以这两个元素为value的checkbox将处于选中状态。效果如下:
当我们使用Array或者集合作为数据源,且里面的元素都是一个一个POJO时,我们还可以使用checkboxes标签的itemLabel和itemValue属性来表示使用数组或者集合中元素对象的哪一个属性作为需要呈现的单选框的label和value。
1.6 radiobutton标签
radiobutton标签会被渲染为一个type为radio的普通HTML input标签。radiobutton标签也是可以绑定数据的。以下是一个radiobutton的简单应用示例:
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>性别:</td>
5. <td>
6. <form:radiobutton path="sex" value="1"/>男
7. <form:radiobutton path="sex" value="0"/>女
8. </td>
9. </tr>
10. <tr>
11. <td colspan="2"><input type="submit" value="提交"/></td>
12. </tr>
13. </table>
14.</form:form>
在上面代码中我们的radiobutton标签都是绑定了表单对象user的sex属性,当sex为1的时候就代表性别为男,上面性别为男的那一行就会被选中,当sex为0的时候就代表性别为女,上面性别为女的那一行就会被选中。
1.7 radiobuttons标签
radiobuttons标签跟radiobutton标签的区别如同checkbox标签对checkboxes标签的区别。使用radiobuttons标签的时候将生成多个单选按钮。使用radiobuttons有两个属性也是我们必须指定的,一个是path属性,表示绑定的表单对象对应的属性,另一个是items属性,表示用于生成单选按钮的数据源。跟checkboxes一样,radiobuttons的items属性和path属性都可以是Array、集合或者是Map。现在我们假设user在篮球、足球、乒乓球、羽毛球和排球这5种运动中选择一种作为自己最喜欢的球类运动。处理器方法和返回的对应的视图代码如下:
Java代码
1.@RequestMapping(value="form", method=RequestMethod.GET)
2.public String formTag(Map<String, Object> map) {
3. User user = new User();
4. user.setFavoriteBall(4);//设置我最喜爱的球类运动是4羽毛球
5. Map<Integer, String> ballMap = new HashMap<Integer, String>();
6. ballMap.put(1, "篮球");
7. ballMap.put(2, "足球");
8. ballMap.put(3, "乒乓球");
9. ballMap.put(4, "羽毛球");
10. ballMap.put(5, "排球");
11. map.put("user", user);
12. map.put("ballMap", ballMap);
13. return "formTag/form";
14.}
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>最喜欢的球类:</td>
5. <td>
6. <form:radiobuttons path="favoriteBall" items="${ballMap}" delimiter=" "/>
7. </td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
在上述代码中我们可以看到我们使用了radiobuttons的delimiter属性,该属性表示进行展示的radiobutton之间的分隔符。这里用的是一个空格。结果页面如下所示:
1.8 password标签
password标签将会被渲染为一个type为password的普通HTML input标签。
1.9 select标签
select标签将会被渲染为一个普通的HTML select标签。这里还拿前面的user最喜欢的球类运动来做示例,有如下这样一个处理器方法和对应的视图页面:
Java代码
1.@RequestMapping(value="form", method=RequestMethod.GET)
2.public String formTag(Map<String, Object> map) {
3. User user = new User();
4. user.setFavoriteBall(4);//设置我最喜爱的球类运动是4羽毛球
5. Map<Integer, String> ballMap = new HashMap<Integer, String>();
6. ballMap.put(1, "篮球");
7. ballMap.put(2, "足球");
8. ballMap.put(3, "乒乓球");
9. ballMap.put(4, "羽毛球");
10. ballMap.put(5, "排球");
11. map.put("user", user);
12. map.put("ballMap", ballMap);
13. return "formTag/form";
14.}
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>最喜欢的运动:</td>
5. <td>
6. <form:select path="favoriteBall" items="${ballMap}"/>
7. </td>
8. </tr>
9. <tr>
10. <td colspan="2"><input type="submit" value="提交"/></td>
11. </tr>
12. </table>
13.</form:form>
这个时候会渲染出如下结果:
从上面示例我们可以看出,我们通过items属性给select标签指定了一个数据源,并且绑定了表单对象user的favoriteBall属性。Items属性是用于指定当前select的所有可选项的,但是它对于select标签而言不是必须的,因为我们还可以手动的在select标签中间加上option标签来指定select可选的option。Select标签支持的items属性的数据类型可以是Array、Collection和Map,当数据类型为Array或Collection时且其中的元素为一个POJO时,我们可以通过属性itemLabel和itemValue来指定将用于呈现的option Label和Value,其他情况下Array和Collection数据源中的元素将既作为可选项option的value又作为它的Label。当items的数据类型为Map时,Map的key将作为可选项option的value,而Map的value将作为option的Label标签。
1.10 option标签
option标签会被渲染为一个普通的HTML option标签。当一个SpringMVC select标签没有通过items属性指定自己的数据源的时候,我们就可以在select标签中通过普通HTML option标签或者SpringMVC option标签来指定可以选择的项。
Jsp代码
1.<form:form action="formTag/form.do" method="post" commandName="user">
2. <table>
3. <tr>
4. <td>最喜欢的运动:</td>
5. <td>
6. <form:select path="favoriteBall">
7. <option>请选择</option>
8. <form:option value="1">篮球</form:option>
9. <option value="4">羽毛球</option>
10. </form:select>
11. </td>
12. </tr>
13. <tr>
14. <td colspan="2"><input type="submit" value="提交"/></td>
15. </tr>
16. </table>
17.</form:form>
我们可以看到在上面代码中我们是没有指定select标签的数据源的,而是通过在select标签体里面指定普通HTML option标签和SpringMVC option标签来指定可选项。其渲染的效果如下:
转自:http://blog.csdn.net/dyllove98/article/details/8590642
发表评论
-
spring整合mybatis相关问题
2017-05-26 15:27 515最近开发一个会员接口,由于公司想要把这个接 ... -
Spring事务配置的五种方式(转)
2015-02-26 14:12 743原文来源:http://blog.csdn.net/it_m ... -
spring编程式事务和声明式事务+银行转账事务实例(转)
2015-02-26 13:52 2350银行转账事务实例:http://www.cnblogs.c ... -
spring注入的对象报null的原因
2012-11-28 12:05 10132领导要求做项目移植,即把现有的项目中的部分内容移植到新 ... -
Jsp/Servlet:实现文件上传与下载
2012-10-30 17:54 920“子 孑” 博客有相关文章,参见:http://zhangju ... -
spring集成struts的HelloWorld
2011-10-21 18:49 1078首先把spring和struts的jar包加进去,注意看jar ... -
spring集成hibernate的HelloWorld
2011-10-21 16:40 1081本文中省去了创建User对象并为其做映射的部分 第一步:添加 ... -
spring的HelloWorld
2011-10-21 15:25 1081spring的核心是IoC、DI,下面是一个spring的He ...
相关推荐
### SpringMVC表单标签简介 #### 一、SpringMVC表单标签概述 SpringMVC框架提供了一系列的表单标签库(Form Tag Library),旨在简化Web应用中表单的处理过程,使得开发者能够更加轻松地创建和管理HTML表单元素,...
SpringMVC表单标签知识点详解 SpringMVC表单标签是SpringMVC框架中的一种重要组件,用于在Web应用程序中处理表单数据。下面是SpringMVC表单标签的一些关键知识点: 一、SpringMVC表单标签的使用 在使用SpringMVC...
1. **表单标签**:在SpringMVC中,我们通常使用JSP或Thymeleaf等模板引擎来处理前端视图。对于JSP,Spring提供了一组自定义的JSTL标签,如`<form:form>`、`<form:input>`、`<form:errors>`等,这些标签简化了与...
- `@ModelAttribute`:用于将模型数据绑定到表单或者从表单中恢复。 4. **AOP(面向切面编程)**: - Spring MVC 可以结合 Spring AOP 实现全局异常处理、日志记录等切面逻辑。 5. **国际化与主题支持**: - ...
<form action="/springmvc/upload" method="post" enctype="multipart/form-data"> 确定 ``` 在`upload`方法内部,我们处理文件保存逻辑。首先,创建一个文件夹来存储上传的文件,然后使用`MultipartFile`的`...
在Spring MVC框架中,表单标签数据绑定是一个关键特性,它允许我们轻松地将表单字段与模型对象的属性关联起来。在这个“图书管理”Demo中,我们将深入探讨这一概念。 首先,Spring MVC中的表单标签是基于JSP标准...
form标签是SpringMVC表单标签的基础,它的主要功能有两点: 1. 自动绑定表单对象:form标签可以将ModelMap中的属性值绑定到对应的表单实体对象上。默认情况下,它会查找名为`command`的属性。这意味着,如果你的...
8. **JSP标签库**:提供了丰富的JSP标签,简化视图层的编写。 **Spring MVC的运行原理** 当一个HTTP请求到达服务器时,DispatcherServlet首先拦截这个请求,然后根据HandlerMapping找到对应的处理器。处理器执行完...
全书共计12章,分别从Spring框架、模型2和MVC模式、Spring MVC介绍、控制器、数据绑定和表单标签库、传唤器和格式化、验证器、表达式语言、JSTL、国际化、上传文件、下载文件多个角度介绍了Spring MVC。除此之外,...
1.SpringMVC 概述 2.SpringMVC 的 HelloWorld 3.使用 @RequestMapping 映射请求 • 4.映射请求参数 & 请求头 • 5....• 8.SpringMVC 表单标签 &处理静态资源 • 9.数据转换 & 数据格式化 & 数据校验
在 SpringMVC 框架中,我们可以使用 `<form:button>` 标签来创建一个注册按钮。 2. 添加注册页面 接下来,我们需要添加一个注册页面,用于收集用户的注册信息。在 SpringMVC 框架中,我们可以使用 JSP 或 HTML ...
- 在JSP页面中使用`<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>`来引入Spring MVC的表单标签库。这个步骤非常重要,因为Spring MVC的表单标签库提供了一系列用于创建HTML表单元素的...
这个方法通常会包含一个`@RequestParam("file") MultipartFile file`参数,这里的"file"是前端表单中input标签的name属性,用于标识上传的文件。 3. **表单提交** 前端页面需要创建一个HTML表单,设置`enctype=...
表单标签库 为了简化HTML表单的创建和维护,Spring MVC提供了强大的表单标签库。这些标签可以帮助开发人员更容易地生成表单元素,并自动填充表单数据。 #### 4. 异常处理 Spring MVC内置了一套异常处理机制,可以...
1. **LayUI**:LayUI是一个轻量级的前端框架,它的特点是简洁、易用,提供了丰富的UI组件,如表格、按钮、表单、弹窗等,支持响应式布局,适应不同设备的显示需求。在实际项目中,开发者可以通过LayUI快速搭建美观的...
SpringMVC form标签引入及使用方法 在本文中,我们将详细介绍 SpringMVC form标签的引入及使用方法。SpringMVC 是一个基于 Java 的 Web 应用框架,提供了一些实用的标签来简化开发过程。其中,form标签是其中一个...
#### 八、SpringMVC表单标签&处理静态资源 - **表单标签**:SpringMVC提供了丰富的表单标签库,可以帮助开发者快速构建表单并自动填充数据。 - **静态资源处理**:SpringMVC可以通过配置静态资源处理器(如Spring的...
5. JSP页面结合Thymeleaf或JSTL标签库展示数据,使用jQuery和jQuery Validation处理用户交互。 系统可能包含的功能模块: 1. 用户注册与登录:用户可以注册账户,系统通过验证邮箱或手机号码的唯一性来确保账户安全...
- `String getName()`: 获取表单中的字段名。 - `InputStream getInputStream() throws IOException`: 获取文件输入流。 - `byte[] getBytes() throws IOException`: 获取文件内容的字节数组。 - `void transferTo...
不过,由于【部分内容】并未提供具体关于Spring MVC源码分析的有效信息,因此这里将基于标题、描述以及标签所暗示的内容来展开Spring MVC框架的核心知识点,包括其架构、工作原理、核心组件等。 ### Spring MVC简介...