[英]form:errors doesn't render on jsp
我有以下控制器:
@RequestMapping(value = "/member/createCompany/addParams", method = RequestMethod.POST)
public String setCompanyParams(
@ModelAttribute MyDto myDto,
@RequestParam(value = "g-recaptcha-response") String recapchaResponse,
HttpSession session, Principal principal, Model model) throws Exception {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<MyDto>> violations;
if(condition1){
violations = validator.validate(myDto, ValidationGroup1.class);
} else {
violations = validator.validate(myDto);
}
if (violations.size() > 0) {
return "member/createCompany/addParams";
}
...
}
MyDto类:
class MyDto {
@NotEmpty
String companyName;
@NotEmpty(groups = ValidationGroup1.class)
String generatedPassword;
}
和以下jsp:
<form:form commandName="myDto" id="addParams" action="/member/createCompany/addParams" method="POST">
<form:errors cssClass="error" path="companyName"/><br/>
<form:input type="text" id="companyName" path="companyName" name="companyName" maxlength="255" value="${campaign.campaignName}"/><br/>
<form:errors cssClass="error" path="generatedPassword"/><br/>
<form:input path="generatedPassword" type="text" id="generatedPassword" name="generatedPassword" value="${generatedPassword}" />
...
</form:form>
当我提交表格时,我看到
violations.size() > 0
为true
但是当我看到渲染页面时,我看不到错误消息。
什么问题
正如我在回答上一个问题时所说的那样,这不是Spring MVC验证工作的方式。
如果您遵循它的规则,Spring MVC会带来很多魔力。 为了使<form:errors .../>
标记起作用,您必须在响应中将一个Errors
对象绑定到ModelAttribute
对象。 它发生自动的,如果你把一个BindingResult
方法参数模型的属性后(见参考文献编辑答案)
不幸的是,当您这样做时,Spring将验证每个字段,而这不是您想要的,而没有任何简单的方法来忽略某些字段上的错误。 所以你可以:
violation
)显式拒绝字段-有点手动但可靠的方法 SpringValidatorAdapter
,因为它可以通过其SmartValidator
接口将验证组用作验证提示,并在SmartValidator
显式调用其方法void validate(Object target, Errors errors, Object... validationHints)
。 无论如何,我强烈建议您不要为每个请求创建一个验证器,而是将其创建为bean并将其注入到控制器中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.