4.1.2 input标签
4.1.2 input标签
input标签作用 被渲染成HTML input标签
Spring MVC
的input
标签会被渲染为一个类型为text
的普通HTML input
标签。
input标签用途 绑定表单数据
使用SpringMVC
的input
标签的唯一目的就是绑定表单数据,通过path
属性来指定要绑定的Model
中的值。
input标签属性
Input
标签可使用如表4.3所示的属性。表4.3中列出的只是SpringMVC
的input
标签的常用属性,并没有包含HTML
的相关属性。
属性 | 描述 |
---|---|
cssClass |
定义要应用到被渲染的Input 元素的CSS 类 |
cssStyle |
定义要应用到被渲染的Input 元素的CSS 样式 |
cssErrorClass |
定义要应用到被渲染Input 元素的CSS 类,如果bound 属性中包含错误,则覆盖cssClass 属性值 |
htmlEscape |
boolean 值,表示被渲染的值是否应该进行HTML 转义 |
path |
要绑定的属性路径 |
示例: form和input标签的使用
项目结构
展开/折叠
G:\Desktop\随书源码\Spring+Mybatis企业应用实战(第2版)\codes\04\FormTest ├─src\ │ └─org\ │ └─fkit\ │ ├─controller\ │ │ └─UserController.java │ └─domain\ │ └─User.java └─WebContent\ ├─index.jsp ├─META-INF\ │ └─MANIFEST.MF └─WEB-INF\ ├─content\ │ ├─registerForm.jsp │ └─registerForm2.jsp ├─lib\ │ ├─commons-logging-1.2.jar │ ├─spring-aop-5.0.1.RELEASE.jar │ ├─spring-aspects-5.0.1.RELEASE.jar │ ├─spring-beans-5.0.1.RELEASE.jar │ ├─spring-context-5.0.1.RELEASE.jar │ ├─spring-context-indexer-5.0.1.RELEASE.jar │ ├─spring-context-support-5.0.1.RELEASE.jar │ ├─spring-core-5.0.1.RELEASE.jar │ ├─spring-expression-5.0.1.RELEASE.jar │ ├─spring-instrument-5.0.1.RELEASE.jar │ ├─spring-jcl-5.0.1.RELEASE.jar │ ├─spring-jdbc-5.0.1.RELEASE.jar │ ├─spring-jms-5.0.1.RELEASE.jar │ ├─spring-messaging-5.0.1.RELEASE.jar │ ├─spring-orm-5.0.1.RELEASE.jar │ ├─spring-oxm-5.0.1.RELEASE.jar │ ├─spring-test-5.0.1.RELEASE.jar │ ├─spring-tx-5.0.1.RELEASE.jar │ ├─spring-web-5.0.1.RELEASE.jar │ ├─spring-webflux-5.0.1.RELEASE.jar │ ├─spring-webmvc-5.0.1.RELEASE.jar │ └─spring-websocket-5.0.1.RELEASE.jar ├─springmvc-config.xml └─web.xml
registerForm.jsp
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
如果Model
中存在一个属性名称为command
的JavaBean
,而且该JavaBean
拥有属性username
、sex
和age
,则在渲染上面的代码时就会取command
这个JavaBean
的属性值赋给form
中input
标签同名属性。(也就是说:Model
中名为command
的JavaBean
的成员变量username
赋值给path="username
“这个input
标签,以此类推)
UserController.java
1 | package org.fkit.controller; |
分析
注意registerForm
方法中的代码:
1 | model.addAttribute("command", user); |
该代码将user
设置到Model
当中,属性名为“command
”。
web.xml
文件和springmvc-config.xml
文件和之前描述的一致,此处不再赘述。
测试
部署FormTest
这个Web
应用,在浏览器中输入如下URL
来测试应用:
http://localhost:8080/FormTest/registerForm
会看到如图4.1所示的界面。
渲染效果
在上面的代码中,假设Model
中存在一个属性名称为command
的JavaBean
,且它的username
、sex
和age
属性值分别为“jack”、“男”和“28”,则在浏览器页面单击→右键→查看页面源代码,可以看到Spring MVC
的from
标签和input
标签渲染时生成的html
代码如下:
1 | <form id="command" action="register" method="post"> |
从上面生成的代码,我们可以看出,当没有指定form
标签的id
属性时它会自动获取该form
标签绑定的Model
中对应属性名称command
作为id
;而对于input
标签,在没有指定id
的情况下它会自动获取path
指定的属性值作为它的id
和name
。
使用form标签的commandName属性指定绑定的JavaBean
Spring MVC
指定form
标签默认自动绑定的是Model
的command
属性,那么当form
对象对应的属性名称不是command
时,应该怎么办呢?对于这种情况,Spring
提供了一个commandName
属性,可以通过commandName
属性来指定将使用Model
中的哪个属性作为form
标签需要绑定的command
对象。除了commandName
属性外,指定modelAttribute
属性也可以达到相同的效果。这里假设上面代码存放在Model
中的是user
对象而不是默认的command
对象,那么我们的代码就可以如下定义了:
registerForm2.jsp
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
注意,这里使用了form
表单标签的modelAttribute
属性,设置属性值为“user
”:
<form:form modelAttribute="user" method="post" action="register">
对应的请求处理方法
1 |
|
注意代码:
model.addAttribute("user", user);
它将user
设置到Model
当中,属性名不是“command
”,而是“user
”。
测试
在浏览器中输入如下URL
来测试应用:
http://localhost:8080/FormTest/registerForm2
渲染效果
然后查看源码,渲染结果如下:
1 | <form id="user" action="register" method="post"> |