Spring提供了form标签库
,主要完成如下功能
渲染Model对象到表单
- 可以绑定一个Model对象
,当Model名称变化,不需要到处修改绑定的Model名称
显示错误
🌹 form标签库 - 作用
在没用form标签库
之前,我需要如下渲染
<form >
<input type="hidden" name="id" value="${adDto.id}">
<input type="hidden" name="imgFileName" value="${adDto.imgFileName}">
<input type="hidden" name="imgUrl" value="${adDto.imgUrl}">
</form>
当adDto名称变成ad
,我需要修改全部adDto成ad
。
使用form标签库
,我只需修改一处
。
<form:form commandName="adDto">
<form:input path="id" id="id" name="title" type="hidden"/>
<form:input path="imgFileName" id="imgFileName" name="title" type="hidden"/>
<form:input path="imgUrl" id="imgUrl" name="title" type="hidden"/>
</form:form>
🌷 引入form标签库 - 使用Taglib指令引入
<!-- taglib -->
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
🌻 form标签 - 绑定对象、渲染表单
form标签的作用就是为了方便绑定到Model
。
标签如下
标签 | 作用 | 属性 |
---|---|---|
<form:form> | 渲染成form | command - 来绑定Model |
<form:input> | 渲染成input | path - 绑定Model的属性,path会渲染成id和name |
… | … | … |
除了上面,还有<form:check>
、<form:password>
等很多标签,没必要记。用的时候,直接当成input
,指定type
就好,如下
<form:input path="priority" type="password"/>
而不是记住<input:password>
<form:password path="priority"/>
🌼 error标签 - 显示BindingResult中错误
🌺 error标签 - 原理和介绍
- 如果使用
jsr-303验证
,验证错误会在BindingResult
中。 - BindingResult会
自动放到Model
中,key是BindingResult.MODEL_KEY_PREFIX + 参数名称
。 <form:errors>
会在BindingResult.MODEL_KEY_PREFIX
取出错误
/*
* BindingResult在Model中的 key= BindingResult.MODEL_KEY_PREFIX + adDto
* 等于如下
* model.put(BindingResult.MODEL_KEY_PREFIX + 'adDto',bindingResult)
*/
@PutMapping("/edit")
public String adEdit(@Validated AdDto adDto, BindingResult bindingResult)
error标签有如下属性
属性 | 解释 |
---|---|
path | 哪个field的错误,* 是所有错误 |
cssClass | 错误样式 |
🌸 error标签 - 显示所有错误
<form:errors path="enabled" cssClass="error" />
🍁 error标签 - 显示指定错误
<form:errors path="*" cssClass="error" />