web颜值要爆表WebJava Web知识

JSR 303验证相关问题及解决 办法

2017-01-04  本文已影响137人  GuaKin_Huang

使用 Hibernate Validator


导入Hibernate Validator的相关jar

1483444847480.png

在相关字段属性上进行注解

@Size(min = 2, max = 6, message = "{Size.product.name}") message 可以不写,会使用默认的来自JSR 303验证器的错误消息;
如果要自定义错误消息的话,请看自定义错误消息操作步骤;

public class Product {
    private int id;
    
    @Size(min = 2, max = 6)
    private String name;
    
    private float price;
    private Date date;

    public Product() {
    }
    
    // 、、、getter and setter
}
@Controller
@RequestMapping("/product")
public class ProductController {
    @Autowired
    private IProductService productService;

    @RequestMapping("/input")
    public String inputInfo(Model model) {
        model.addAttribute("product", new Product());
        return "product-add";
    }

//必须用@Valid 对Product参数进行标注

    @RequestMapping("/add")
    public String addProduct(@Valid @ModelAttribute Product product, BindingResult bindingResult, Model model) {
        if (bindingResult.hasErrors()){
            List<ObjectError> allErrors = bindingResult.getAllErrors();
            for (ObjectError objectError:allErrors){
                System.out.println(objectError.getDefaultMessage());
            }
            model.addAttribute("allErrors", allErrors);
            return "product-add";
        }
        productService.add(product);
        return "redirect:/product/list";
    }
    
    // 、、、、其他操作
}

效果:

默认错误提示信息.gif

以上操作就可以实现验证器验证了,不过错误消息来自JSR 303的默认错误提示消息;

下面是自定义错误提示消息的操作:

先在Resource添加属性文件,

其中ValidationMessages即 properties的名称,注意:properties文件的名字一定要命名成:ValidationMessages.properties

填入相关错误提示信息:

格式:

constraint.object.property

为了覆盖以@Size标注约束的 Product 对象的 name 属性,可以在属性文件中使用下面的键:

Size.product.name

为了覆盖以@Past标注约束的 Product 对象的 date 属性,可以在属性文件中使用下面的键:

Past.product.date

内容如下:

1483446900377.png
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="ValidationMessages"/>
    </bean>
public class Product {
    private int id;
    
    @Size(min = 2, max = 6, message = "{Size.product.name}")
    private String name;
    
    private float price;
    private Date date;

    public Product() {
    }
    
    // 、、、getter and setter
}

效果:

自定义错误提示信息.gif

解决中文乱码问题

1483447433512.png 1483447647598.png
上一篇下一篇

猜你喜欢

热点阅读