SpringMVC基础项目(校验)

1、spring-mvc.xml的配置

配置MessageSource,即消息源

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="/WEB-INF/msg" />
    </bean>

这个bean的id必须叫做messageSource。
在resource目录下创建一个properties配置文件,Spring MVC框架会读取该id所对应的bean对象来读取资源配置文件,里面设置了basename属性,用作读取该文件,该文件的配置只需要文件名,不能加后缀。
msg.properties

book.id=not empty.
book.name=书名不能为空
book.price=not empty.
book.price.invalidate=价格不能为负数.

2、创建一个BookBeanValidate类

创建一个BookBeanValidate类实现Validator接口
里面包含两个方法:supports和validate

supports:

@Override
    public boolean supports(Class<?> clazz) {
        return BookBean.class.isAssignableFrom(clazz);
    }

supports方法的意思是当前类用来对于哪个类实现校验
BookBean.class.isAssignableFrom(clazz);意思是完成对BookBean的校验

validate:

@Override
    public void validate(Object target, Errors errors) {
        BookBean bookBean = (BookBean) target;

        /**
         *
         * 非空校验
         *
         * 使用ValidationUtils工具类来实现对于某些非空字段的校验,该方法包含三个参数:
         *      1.  错误对象,用来收集并存储错误信息
         *      2.  要校验的字段
         *      3.  错误码,在msg配置文件中配置的key信息
         */
        ValidationUtils.rejectIfEmpty(errors, "id", "book.id");
        ValidationUtils.rejectIfEmpty(errors, "name", "book.name");
        ValidationUtils.rejectIfEmpty(errors, "price", "book.price");

        double price = bookBean.getPrice();

        /**
         *  合法性校验,使用errors对象的rejectValue()方法完成合法性校验,里面包含了两个参数
         *
         *      1. field,在哪个字段上完成校验
         *      2.  错误码,会在msg文件中找到该key对应的错误信息
         */

        if(price < 0){
            errors.rejectValue("price", "book.price.invalidate");
        }
    }

validate方法,完成真正的校验,一定是满足了supports方法之后才会进入该方法来进行校验。
分为两种校验。一种为非空校验,使用ValidationUtils工具类来实现对于某些非空字段的校验。一种为合法性校验。使用errors对象的rejectValue()方法完成合法性校验。什么是合法性校验,如本例就是price不能为负,若为负则不合法。

3、校验页面,以新增页面save.jsp为例

该页面要注意引入Spring MVC的form标签,表单使用的就是SpringMVC的form表单

<%@ taglib prefix="f" uri="http://www.springframework.org/tags/form" %>

(1)f:form:使用的是Spring MVC的form标签,里面有一个属性叫做commandName,这个值是从后端传递过来的对象名,注意要与bean的小写方式一致
(2)f:input类似于html中的input标签,但是将name换成了path,代表的是属性名
(3)f:errors,这个标签可以用来展示如果当前表单有错误信息时,可以在对应的域之上进行回显,一般都被放在对应的f:input标签之后,用来描述该属性的错误信息

<f:form method="post" action="/save" commandName="bookBean">
        编号:<input path="id"><font color="red"><f:errors path="id" /></font> <br>
        书名:<input path="name"><font color="red"><f:errors path="name" /></font> <br>
        价格:<input path="price"><font color="red"><f:errors path="price" /></font> <br>
        <input type="submit" value="submit">
    </f:form>

4、Controller控制器

@GetMapping("/save")
    public ModelAndView save(){
        return new ModelAndView("save.jsp", "bookBean", new BookBean());
    }

GetMapping("/save")代表以get方式请求该资源,里面写了一个ModelAndView对象,传了三个参数,第一个是viewname,视图名,拼接上前后缀可以得到真正的物理视图,来打开该物理视图所对应的页面,第二个参数为modelname,模型名,相当于给模型起名字,这里要注意,该模型名意识要被叫做bean对象的小写形式BookBean (bookBean),第三个参数为modelObject,模型对象,将该对象通过模型名传递给第一个参数viewname所对应的页面,在那个页面中可以渲染该数据。
总的来说就是以get方式请求去save页面

@PostMapping("/save")
    public String save(BookBean bookBean, BindingResult errors, Model model){

        BookBeanValidate bv = new BookBeanValidate();

        bv.validate(bookBean, errors);

        if(errors.hasErrors()){
            model.addAttribute("book", bookBean);
            return "save.jsp";
        }

        return "redirect:/book";
    }

PostMapping("/save"),该注解的意思是页面上的表单通过post请求将save的请求来在这里进行处理。该方法包含有三个参数,第一个是BookBean对象,可以自动封装表单中的属性为Bean对象,第二个参数为BindingResult对象,该对象我们通过源码可以发现是Spring中的Errors的子接口,可以用来接收并存储错误信息,这个对象可以接收从BookBeanValidate校验类中产生的错误信息,存储以交给错误页面的f:errors标签来展示错误信息,第三个参数是Model对象,可以用来储存对象,目的是可以使的bean对象的错误数据进行回显。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容

  • 故事一 晚上给爸爸给儿子洗完澡,交接给妈妈。 妈妈接过儿子:“儿子,妈妈相信你自己能睡着” 儿子回复说:“妈妈,我...
    行走的云儿阅读 681评论 0 0
  • 古人说:“三日不读书,便觉言语无味、面目可憎。”博览群书,开阔思路,活跃文思,心飘万里之外,神游八方。读书...
    农安122翟越阅读 4,449评论 0 17
  • 这是刁明的第5篇读书杂谈 下面,我将用七句话总结这本书,一句话总结我所学的科学知识。 第一堂课 最美的理论 空间不...
    竹林鸡阅读 3,655评论 0 1
  • 复利效应就是很小的进步会随着时间的积累产生巨大的变化。我们可以把复利效应运用在心绪管理上,每天多笑,心情开怀,随着...
    鹿韬阅读 747评论 0 0
  • 无知让人看不清自己,也看不清世界 我年华虚度,空有一身疲倦。 人生的刺就在这里,留恋着不肯快走的,偏是你所不留恋的...
    子木空阅读 1,911评论 0 13