今天的工程实现的内容是通过SpringMVC的一个校验来实现对一些必填项的显示,使我们不需要自己在controller中分别对每一项的内容的一些必要属性进行判断。这个校验主要是通过一个SpringMVC的一个名为ValidationMessages,后缀为.properties的文件夹来实现相应的错误提示的显示errors.required={field}为必填项。这个文件夹在SpringMVC自己的框架中具备,但是我们需要实现一个自己定义的验证提示信息,需要将这个验证提示信息改为我们需要的。当然,这个的验证并不是仅靠一个文件夹,我们还需要在我们的UserBean的属性中加入我们需要验证的项,并在这些属性值前加@NotEmpty注释表明该属性值是不能为空的,具体写法如下:
@NotEmpty(field="用户ID",message="errors.required")
private String userId;
这些@NotEmpty的核对,主要是通过cn.agriculture.common.validation.constraints包中的NotEmpty这个类,在这个类中我们可以看到:String message() default "{org.hibernate.validator.constraints.NotEmpty.message}",这个@NotEmpty的错误信息需要关联默认的包中的NotEmpty中的message,所以我们需要在WebContent中的WEB-INF下的lib中导入相应的org.hibernate.validator的包。另外,在这里我们需要注意@Constraint(validatedBy = { NotEmptyValidator.class }),我们现在查看的NotEmpty这个类需要关联NotEmptyValidator这个类。在这个类中,我们继承了SpringMVC的Validation的验证 ConstraintValidator<NotEmpty, CharSequence>。在这个类中,我们加入了一个判断是否输入值是否有效的方法,也就是isValid方法,这个方法通过判断我们需要核对的必填项是否为空,在空的时候返回给页面一个错误的提示信息。
public boolean isValid(CharSequence charSequence, ConstraintValidatorContext constraintValidatorContext) {
if ( charSequence == null ) {
return true;
}
return charSequence.toString().trim().length() > 0;
}
在使用自动验证时,我们需要将SpringMVC中的一个messageSource的bean注释掉,因为我们需要SpringMVC调用自己的验证消息处理,注意此时上边的ValidationMessages的文件名必须写对,这样系统才可以找到并使用我们自定义的验证提示信息。
<!-- basenamesプロパティでメッセージプロパティファイルを設定する。
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames" value="application-messages, system-messages" />
</bean>-->
在发现错误信息出现@Autowired注入失败时,我们需要检验自己的sqlMapConfig与web.xml文件中的前三行,注意使它们隔开,引号之间不能挨着,否则会出现错误。正确的sqlConfig文件的开头:
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
web.xml的前三行:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
上面准备工作结束之后,我们在相应的controller中加入验证,但是此时的传入参数与之前有很大不同,下面是方法的的参数,当然其中的HttpSession这个类型的参数不是必须的,如果有的时候要特别注意参数的位置不要改变,否则会影响结果的正确。注意这里的UserBean是需要验证的类,然后当页面提交到我们这个方法执行时,我们将验证内容通过results这个BindingResult类的实例对象的hasErrors()方法来对提交数据进行检验,但是在此之前,我们需要在第一页面实例化一个UserBean类的对象,并通过model的addAttribute()方法记忆这个对象。这样我们才可以在后续的页面中实现这个UserBean的验证。
public String initLogin(Model model,HttpSession session,@Valid @ModelAttribute("userBean")UserBean userBean,BindingResult results)
另外,我们需要将验证得到的错误信息显示在我们当前的页面上,所以在当前页面的HTML编写中,我们需要加入一<span>,在其中加入th:if属性(判断一下后边的el表达式是否为真,在真的时候显示错误信息,假的时候什么都不显示)和th:errors属性,写法是<span th:if="${#fields.hasErrors('${userBean.*}')}">与<span th:errors="${userBean.*}">,在这个中我们传递过来的UserBean的变量名为userBean,整合写法如下:
<span th:if="${#fields.hasErrors('${userBean.*}')}"><span th:errors="${userBean.*}"></span></span>在HTML中套用css,我们可以通过在页面上边添加一个<link>标签来将需要的css样式表导入。通过在我们的每一个<div>中的class属性值不同来使用不同的呈现样式,而且在一个HTML页面中可以通过th:replace属性将该部分内容用其他的HTML页面置换,即实现多个HTML页面的整合.
<link href="shop/css/style.css" rel="stylesheet" type="text/css" media="all" />
本文介绍如何使用SpringMVC的Validation特性,通过@NotEmpty注解和自定义验证消息,实现对UserBean属性的自动校验。涵盖配置、错误信息显示及控制器中的验证流程。
2000

被折叠的 条评论
为什么被折叠?



