SpringMVC标签库
SpringMVC提供了两套标签库,用于简化jsp页面编程。一般只使用form标签库,其它所需要的标签可以使用JSTL标签库
<form:form>
用于生成一个form表单,并且支持数据回显和报错显示
注意:在使用时必须有对应的model对象
编程使用
<form:form action="abc" modelAttribute="user">
<table>
<tr>
<td><form:label path="username">用户名称:</form:label></td>
<td><form:input path="username"/><form:errors path="username"/> </td>
</tr>
</table>
</form:form>
生成的html页面为
<form id="user" action="abc" method="post">
<table>
<tr>
<td><label for="username">用户名称:</label></td>
<td><input id="username" name="username" type="text" value="zhangqianduan"/> </td>
</tr>
</table>
</form>
<form:label path="username">
用于生成label标签
<form:input path="username"/>
用于生成单行输入域,<input name="username" type="text"/>
<form:errors path="username"/>
用于显示和username输入域相关的报错信息
<form:password path="password"/>
用于生成单行密码域,就是<input type="password" name="password"/>
<form:button value="登录系统"/>
用于生成按钮 <input type="button" value=""/>
一般不建议使用form标签库中的按钮,按钮定义建议使用html中的按钮
服务器端数据校验
可以使用注解的方式进行服务器端数据校验
JSR 303是Java为Bean数据合法性校验提供的标准框架,它已经包含在JavaEE 6.0 中
JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max 等标准的注解指定校验规则,并通过标准的验证接口对 Bean 进行验证
Hibernate Validator 是 JSR 303 的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解
1、依赖
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>7.0.1.Final</version>
</dependency>
2、打开注解驱动
使用注解的方式定义校验规则
<mvc:annotation-driven validator="validator"/>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
</bean>
3、在接收数据的值bean上添加校验规则
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iPvxZPdm-1621415705508)(JSR303规则.png)]
hibernate-validator的补充规则

@Data
public class User implements Serializable {
private Long id;
@NotBlank(message = "用户名称不能为空")
@Size(min =6,max = 20,message = "用户名称应该是6到20个字符之间!")
private String username;
4、在控制器方法参数上使用注解打开验证@Validated【@Valid–JSR303,而@Validated–SpringMVC】
注意:User和Errors必须紧邻,顺序不能调整。也有人使用BindingResult,和Errors一致
@RequestMapping(value="/add",method = RequestMethod.POST)
public String add(@Validated User user, Errors errors, Model model)throws Exception{//SpringMVC框架能够保证传入数据会自动注入到user对象中
if(errors.hasErrors()){//判定是否有验证错误
return "user/add";//返回输入页
}
5、报错信息显示
<form:errors path="username"/>
6、考虑验证执行顺序
引入分组
public interface UserGroup {
@GroupSequence({AddFirstGroup.class,AddSecondGroup.class})
public interface AddGroup{}
public interface AddFirstGroup{}
public interface AddSecondGroup{}
}
修改验证规则引入不同分组
public class User implements Serializable {
private Long id;
@NotBlank(message = "用户名称不能为空",groups = UserGroup.AddFirstGroup.class)
@Size(min =6,max = 20,message = "用户名称应该是6到20个字符之间!",groups = UserGroup.AddSecondGroup.class)
private String username;
修改控制器的注解
@RequestMapping(value="/add",method = RequestMethod.POST)
public String add(@Validated(UserGroup.AddGroup.class) User user, Errors errors, Model model)throws Exception{//SpringMVC框架能够保证传入数据会自动注入到user对象中
if(errors.hasErrors()){//判定是否有验证错误
return "user/add";//返回输入页
}