我无法理解问题的原因。我的模型中有列表,我想使用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
答案 0 :(得分:0)
我发现了问题。 BindingResult 结果参数始终直接位于 @Value 注释
的参数之后