1. 程式人生 > >Spring MVC中使用errors標簽

Spring MVC中使用errors標簽

set etc obj www. req style prefix pat ava

先創建一個實體類,後續的驗證都基於這個實體類:

public class Goods {
    
    private String goodsName;
    private String city;
    private int amount;
    
    public String getGoodsName() {
        return goodsName;
    }
    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }
    
public String getCity() { return city; } public void setCity(String city) { this.city = city; } public int getAmount() { return amount; } public void setAmount(int amount) { this.amount = amount; } }

表單頁面的controller方法:

    @RequestMapping("/test1")
    
public String test1(Model model) { Goods goods = new Goods(); goods.setGoodsName("聯想電腦"); goods.setCity("北京"); goods.setAmount(10); model.addAttribute("goods",goods); return "/test1"; }

表單jsp頁面

test1.jsp:

<%@ page language
="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>test1</title> </head> <body> <form:form modelAttribute="goods" method="post" action="test2"> <form:input path="goodsName" /> <form:errors path="goodsName"></form:errors> <br /> <c:set var="citys" value="北京,上海,廣州" /> <c:set var="cityList" value="${fn:split(citys,‘,‘) }" /> <form:select path="city"> <form:option value="">請選擇</form:option> <form:options items="${cityList }" /> </form:select> <form:errors path="city"></form:errors> <br /> <form:button>提交</form:button> </form:form> </body> </html>

提交表單的controller:

    @InitBinder
    public void initBinder(DataBinder binder) {
        binder.setValidator(new Validator() {
            
            @Override
            public void validate(Object target, Errors errors) {
                ValidationUtils.rejectIfEmpty(errors, "goodsName", null, "商品名稱不能為空");
                ValidationUtils.rejectIfEmpty(errors, "city", null, "城市不能為空");
                
                Goods goods = (Goods) target;
                if(goods.getGoodsName().length()<4) {
                    errors.rejectValue("goodsName", null, "商品名稱不能少於4個字符");
                }
            }
            
            @Override
            public boolean supports(Class<?> clazz) {
                
                return Goods.class.equals(clazz);
            }
        });
    }
    
    @RequestMapping(value="/test2",method=RequestMethod.POST)
    public String test2(@Validated Goods goods,Errors errors,BindingResult result) {
        if(errors.hasErrors()) {
            return "/test1";
        } else {
            return "/test2";
        }
    }

通過@InitBinder註解的方法,會在test2方法前執行,如果檢查出了錯誤,會在test2方法裏通過errors.hasErrors()方法判斷

Spring MVC中使用errors標簽