java bindingResult hasError函数

java bindingResult hasError函数,java,spring,jakarta-ee,binding,annotations,Java,Spring,Jakarta Ee,Binding,Annotations,我有一个bean,它有一些属性,并带有特定字段的注释。 这个豆子我用了两次 第一次需要在所有属性上使用bindingResult.hasError函数(没问题)。 第二次我只想在四个属性(对应于JSP显示的四个字段)上使用bindingResult.hasError函数,但它不起作用,因为函数bindingResult.hasError在bean中的其他字段上检测错误 我的豆豆: private String region; @NotBlank private String zone; @Not

我有一个bean,它有一些属性,并带有特定字段的注释。
这个豆子我用了两次
第一次需要在所有属性上使用bindingResult.hasError函数(没问题)。
第二次我只想在四个属性(对应于JSP显示的四个字段)上使用bindingResult.hasError函数,但它不起作用,因为函数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");
    }

}
@控制器
公共类MyController{
@自动连线
私人MyFormValidator FormValidator;
@InitBinder
专用绑定器(WebDataBinder绑定器){
binder.setValidator(FormValidator);
}
@RequestMapping(method=RequestMethod.POST)
公共字符串执行(@Valid MyForm form,BindingResult,Model Model){
if(result.hasErrors()){
返回“errorview”;
}
返回“successview”;
}
}
@组成部分
公共类MyFormValidator实现验证器{
@凌驾
公共布尔支持(类clazz){
返回MyForm.class.isAssignableFrom(clazz);
}
@凌驾
公共无效验证(对象目标、错误){
ValidationUtils.rejectIfEmptyOrWhitespace(错误,“linkName”、“linkName.required”、“必须通知链接名”);
}
}

在Spring中,BindingResult会查找完整的对象错误,而不能检查部分对象的错误(对象中只有几个字段)

在对象中,如果任何单个验证失败,则
bindingResult.hasError()
将返回
true
,因此对象的验证失败
bindingResult.hasError()
只有在满足对象中的所有验证时才会为
false


这是一种创建具有列
notnull
属性的DB表,并尝试为这些列插入
NULL
值的操作。

感谢您的回复,你知道为我的表单创建自定义spring验证器还是创建新的java bean更好吗?我个人更喜欢复制表单,因为类的意图将变得更清晰,更易于维护(例如,
CreateLinkForm
EditLinkForm
)是我最终选择的方式。谢谢你的帮助