java bindingResult 有错误函数
java bindingResult hasError function
我有一个 bean,它的某些属性带有某些字段的注释。
这个bean我用了两次
第一次我需要在所有属性上使用 bindingResult.hasError 函数(没问题)。
第二次我只想在四个属性上使用 bindingResult.hasError 函数(对应于我的 JSP 显示的四个字段)但是它不起作用,因为函数 bindingResult.hasError 检测其他错误bean 中的字段
我的豆子:
private String region;
@NotBlank
private String zone;
@NotBlank
private String country;
@NotBlank
private String site;
private Long siteId;
@NotNull
private Long statusId;
private String status;
@NotBlank
private String linkName;
@NotNull
private Long linkTypeId;
private String linkType;
private Integer downloadLineBw;
private Integer downloadPortBw;
private String technology;
@ValidDate
private String installDate;
private String maintenanceInfo;
private String internetConfiguration;
@NotNull
private Long linkRoleId;
private String linkRole;
private Long contractOwnerId;
private String contractOwner;
private Integer uploadPortBw;
private Integer uploadLineBw;
private Long yearlyCost;
@ValidDate
private String endDate;
private String supplier;
private Long ismCost;
private Long oneTimeCost;
private String linkedService;
我的控制器:
@RequestMapping(method = RequestMethod.POST)
public String findLinksByCriteria(@Valid LinkForm link, BindingResult bindingResult, Model uiModel) {
if (isCriteriaEmpty(link)) {
uiModel.addAttribute("criteriaEmptyWarning", "error_search_criteria_empty");
return ViewConstants.LINK_SEARCH_VIEW;
}
if (bindingResult.hasErrors()) {
return ViewConstants.LINK_SEARCH_VIEW;
}
...
}
我的一部分 JSP :
<tr>
<td class="label"><spring:message code="link.site" /></td>
<td class="value"><form:input path="site" cssClass="x-form-text" /></td>
<td class="label"><spring:message code="link.type" /></td>
<td class="value"><form:input path="linkType" cssClass="x-form-text" /></td>
</tr>
<tr>
<td class="label"><spring:message code="link.installDate" /></td>
<td class="value">
<form:input path="installDate" cssClass="datepickerMe" />
<form:errors path="installDate" cssClass="errormsg" />
</td>
<td class="label"><spring:message code="link.EndDate" /></td>
<td class="value">
<form:input path="endDate" cssClass="datepickerMe" />
<form:errors path="endDate" cssClass="errormsg" />
</td>
</tr>
可以创建自定义 spring 验证器,这样您就可以确定应该验证 属性:
@Controller
public class MyController {
@Autowired
private MyFormValidador formValidador;
@InitBinder
private void initBinder(WebDataBinder binder) {
binder.setValidator(formValidador);
}
@RequestMapping(method = RequestMethod.POST)
public String execute(@Valid MyForm form, BindingResult result, Model model) {
if (result.hasErrors()) {
return "errorview";
}
return "successview";
}
}
@Component
public class MyFormValidador implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return MyForm.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "linkName", "linkName.required", "Link name must be informed");
}
}
在Spring中,BindingResult查找完整的对象错误,不能检查部分对象的错误(对象中的几个字段)。
在对象中,如果任何单个验证失败,则 bindingResult.hasError()
将 return true
,因此对象验证失败。 bindingResult.hasError()
仅当对象中的所有验证都满足时才会 false
。
它是创建一个包含列 NOT NULL
属性 的数据库 Table 并尝试为这些列插入 NULL
值。
我有一个 bean,它的某些属性带有某些字段的注释。
这个bean我用了两次
第一次我需要在所有属性上使用 bindingResult.hasError 函数(没问题)。
第二次我只想在四个属性上使用 bindingResult.hasError 函数(对应于我的 JSP 显示的四个字段)但是它不起作用,因为函数 bindingResult.hasError 检测其他错误bean 中的字段
我的豆子:
private String region;
@NotBlank
private String zone;
@NotBlank
private String country;
@NotBlank
private String site;
private Long siteId;
@NotNull
private Long statusId;
private String status;
@NotBlank
private String linkName;
@NotNull
private Long linkTypeId;
private String linkType;
private Integer downloadLineBw;
private Integer downloadPortBw;
private String technology;
@ValidDate
private String installDate;
private String maintenanceInfo;
private String internetConfiguration;
@NotNull
private Long linkRoleId;
private String linkRole;
private Long contractOwnerId;
private String contractOwner;
private Integer uploadPortBw;
private Integer uploadLineBw;
private Long yearlyCost;
@ValidDate
private String endDate;
private String supplier;
private Long ismCost;
private Long oneTimeCost;
private String linkedService;
我的控制器:
@RequestMapping(method = RequestMethod.POST)
public String findLinksByCriteria(@Valid LinkForm link, BindingResult bindingResult, Model uiModel) {
if (isCriteriaEmpty(link)) {
uiModel.addAttribute("criteriaEmptyWarning", "error_search_criteria_empty");
return ViewConstants.LINK_SEARCH_VIEW;
}
if (bindingResult.hasErrors()) {
return ViewConstants.LINK_SEARCH_VIEW;
}
...
}
我的一部分 JSP :
<tr>
<td class="label"><spring:message code="link.site" /></td>
<td class="value"><form:input path="site" cssClass="x-form-text" /></td>
<td class="label"><spring:message code="link.type" /></td>
<td class="value"><form:input path="linkType" cssClass="x-form-text" /></td>
</tr>
<tr>
<td class="label"><spring:message code="link.installDate" /></td>
<td class="value">
<form:input path="installDate" cssClass="datepickerMe" />
<form:errors path="installDate" cssClass="errormsg" />
</td>
<td class="label"><spring:message code="link.EndDate" /></td>
<td class="value">
<form:input path="endDate" cssClass="datepickerMe" />
<form:errors path="endDate" cssClass="errormsg" />
</td>
</tr>
可以创建自定义 spring 验证器,这样您就可以确定应该验证 属性:
@Controller
public class MyController {
@Autowired
private MyFormValidador formValidador;
@InitBinder
private void initBinder(WebDataBinder binder) {
binder.setValidator(formValidador);
}
@RequestMapping(method = RequestMethod.POST)
public String execute(@Valid MyForm form, BindingResult result, Model model) {
if (result.hasErrors()) {
return "errorview";
}
return "successview";
}
}
@Component
public class MyFormValidador implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return MyForm.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "linkName", "linkName.required", "Link name must be informed");
}
}
在Spring中,BindingResult查找完整的对象错误,不能检查部分对象的错误(对象中的几个字段)。
在对象中,如果任何单个验证失败,则 bindingResult.hasError()
将 return true
,因此对象验证失败。 bindingResult.hasError()
仅当对象中的所有验证都满足时才会 false
。
它是创建一个包含列 NOT NULL
属性 的数据库 Table 并尝试为这些列插入 NULL
值。