List的Spring验证不为空

时间:2015-08-28 19:57:02

标签: java spring list validation spring-mvc

我无法理解问题的原因。我的模型中有列表,我想使用Spring和界面验证器

验证它
public class OperationList {
   private List<String> operations;
}
index.jsp

中的

<sf:form method="post" commandName="operationsList" action="${pageContext.request.contextPath}/operation">
<p>
    <sf:checkboxes   element="li" path="operations" items="${list}" ></sf:checkboxes>
    <sf:errors path="operations" cssStyle="color: #ff0000"></sf:errors>
</p>
<input type="submit" value="Go" />

控制器中的

    @RequestMapping(value = "/operation", method = RequestMethod.POST)
public ModelAndView processOperation( @ModelAttribute @Valid OperationList opList, HttpSession session,
        BindingResult result) {
    ModelAndView mav =new ModelAndView();
    if (result.hasErrors()) {
        mav.setViewName("index");
    } else {
        session.setAttribute("operations", opList);
        mav.setViewName("switchfile");
    }
    return mav;
}

验证

@Component
public class OperationValidator implements Validator {

@Override
public boolean supports(Class<?> arg0) {
    return OperationList.class.equals(arg0);
}

@Override
public void validate(Object obj, Errors err) {
    OperationList opearationList = (OperationList) obj;

    List<String> opers = opearationList.getOperations();
    if(opers==null || opers.isEmpty()){
        err.rejectValue("operations", "operationlist.oplist.empty");
    }
}

当我发送带有空OperationList的post请求(/ operation)时,我得到错误而不是index.jsp,带有错误字符串。

the request sent by the client was syntactically incorrect.

有人可以解释这个问题的原因吗?在tcp / ip监视器中,我看到记录“_operations = on” 当我标记复选框并且OperationList不为空时,一切正常。还有一件有趣的事情。在我的应用程序中,我有一个文件上传的验证器。所以它工作正常。 我使用hibernate-validator v.5.1.3;春天v.4.1.6。服务器 - tomcat 8

1 个答案:

答案 0 :(得分:0)

我发现了问题。 BindingResult 结果参数始终直接位于 @Value 注释

的参数之后