Spring MVC中使用errors標簽


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

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()方法判斷


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM