表单的校验错误的输出
在每一个检验input的后面输出自己的错误信息,不将所有的都输出在一起。
首先jsp页面上使用
form:form的要求是在跳到这个页面的时候,进行渲染form必须有个对象传过来,即commondName中的对象名
<@%taglib prefix="form" uri="" />
//body体里面用<form:form>如下:
<form:form commandName="test" action="${pageContext.request.contextPath}/login" method="post">
<table>
<tr>
<td>
//path属性将目标指向test对象中的id属性,下面的意思相同,cssErrorClass 属性表示如果不符合要求就执行的css,自己写就行
<form:label path="id" cssErrorClass="a">id:</form:label>
</td>
<td>
<form:input path="id" cssErrorClass="t"/>
//下面这个标签=就表示如果,校验失败,就渲染下面的一行代码,如果成功,就不进行渲染,
<form:errors path="id" cssClass="errorinput" />
</td>
</tr>
<tr>
<td>
<form:label path="name" cssErrorClass="a">name: </form:label>
</td>
<td>
<form:input path="name" cssErrorClass="t"/>
<form:errors path="name" cssClass="errorinput" />
</td>
</tr>
<tr>
<td>
<input type="submit" value="submit"/>
</td>
</tr>
</table>
</form:form>
//Test类的内容
@Size(min = 1,max = 2,message = "{id.length}")
private String id;
@Size(min = 1,max = 2,message = "{name.length}")
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
上面说过,form:form的要求是在跳到这个页面的时候,进行渲染form必须有个对象传过来,即commondName中的对象名
所以要有一个传对象过去的controller方法,如下:
@Controller
public class TestController {
//先传一个对象过去用于渲染
@RequestMapping("/")
public String index(Test test,Model model) {
model.addAttribute("test",test);
return "index";
}
//@Valid Test test, Errors errors, 固定顺序和写法,保证错误信息的传递
@RequestMapping("/login")
public String login(@Valid Test test, Errors errors, Model model) {
model.addAttribute("test",test);
model.addAttribute("errors",errors);
//测试是不是校验失败,如果失败,返回原页面,上面的两句表示将test对象和errors传到jsp
if(errors.hasErrors()){
return "index";
}else{
return "urlTestSuccess";
}
}
spring的配置文件
//注入校验器
<mvc:annotation-driven validator="validation" />
<bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" id="validation">
<!--校验器-->
<property value="org.hibernate.validator.HibernateValidator" name="providerClass"/>
<property name="validationMessageSource" ref="messageSource"/>
</bean>
//配置信息源,让校验器引用
<bean class="org.springframework.context.support.ReloadableResourceBundleMessageSource" id="messageSource">
<property name="basenames">
<list>
<value>classpath:validation</value>
</list>
</property>
<property value="utf-8" name="defaultEncoding"/>
<!--资源文件120读取一次-->
<property value="120" name="cacheSeconds"/>
</bean>
最后配置 .properties文件就可以了
id.length=123465897
name.length=987456321
jar包要齐全,而且 .properties的文件要让spring找到,附录validation的jar包 (maven格式)
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.2.Final</version>
</dependency>
看不懂,先看看spring基础