暑假学习8(7.21 周二)

本文介绍如何使用SpringMVC的Validation特性,通过@NotEmpty注解和自定义验证消息,实现对UserBean属性的自动校验。涵盖配置、错误信息显示及控制器中的验证流程。

                   今天的工程实现的内容是通过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" />


转载于:https://my.oschina.net/u/2411765/blog/481603

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值