0

假设我有两个视图文件(jsps)和一个类(BudgetControlRegisterDto

预算控制寄存器Dto

public class BudgetControlRegisterDto implements Serializable {
@NotNull(message = "{NotNull.java.util.Date}")
    private Date demandReceiveDate;

@NotNull(message = "{NotNull.java.util.Date}")
    private Date demandOriginalDate;

@NotNull(message = "Start date {NotNull.java.util.Date}")
    private Date startDate;
@NotNull(message = "End date {NotNull.java.util.Date}")
    private Date endDate;


// setter and getter 
}

在一个视图文件中我想验证startDateendDate 而在另一个视图文件中我想验证demandOriginalDatedemandReceiveDate使用 json ajax。当验证发生时,我得到所有字段的验证消息,代码如下:

控制器类的方法这是测试两个视图文件使用的jsp代码

@RequestMapping(value = "/addnewdemand.json", method = RequestMethod.POST)
    public @ResponseBody BudgetControlRegisterDto addNewDemand(@Valid @ModelAttribute("bcrDto") BudgetControlRegisterDto bcrDto,Errors errors){
    log.info("addNewDemand invoked!");
        if(errors.hasErrors()) {
            log.info("has errors");
            bcrDto.setFieldsErrors(errors.getFieldErrors());
            return bcrDto;
        }


    return bcrDto;
    }

.js 文件这是两个视图文件使用的测试代码jsp下面的代码是 ajax 响应代码

if(response.fieldsErrors != null) {
    html ='<div class="ui-message-error">';
    for(var i= 0; i<response.fieldsErrors.length; i++) {
        html+='<span>'+response.fieldsErrors[i].defaultMessage+'</span><br/>';
    }
    html+='</div>';
    $("#bcrForm_message").html(html);
}

质疑为什么 mi 得到所有字段的验证消息

4

1 回答 1

1

这就是发生的情况groups这是关于它们的一个很好的教程。

您需要更改的第一件事是将组属性添加到您的@NotNull注释中。

public class BudgetControlRegisterDto implements Serializable {
@NotNull(message = "{NotNull.java.util.Date}",groups={First.class})
    private Date demandReceiveDate;

@NotNull(message = "{NotNull.java.util.Date}",groups={First.class})
    private Date demandOriginalDate;

@NotNull(message = "Start date {NotNull.java.util.Date}",groups={Second.class})
    private Date startDate;
@NotNull(message = "End date {NotNull.java.util.Date}",groups={Second.class})
    private Date endDate;


public interface First {};
public interface Second {};

// setter and getter 
}

第二个是从更改为@Valid@Validated因为@Valid不支持验证组。

控制器方法:

@RequestMapping(value = "/addnewdemand.json", method = RequestMethod.POST)
    public @ResponseBody BudgetControlRegisterDto addNewDemand(@Validated(BudgetControlRegisterDto.First.class) @ModelAttribute("bcrDto") BudgetControlRegisterDto bcrDto,Errors errors){
    log.info("addNewDemand invoked!");
        if(errors.hasErrors()) {
            log.info("has errors");
            bcrDto.setFieldsErrors(errors.getFieldErrors());
            return bcrDto;
        }


    return bcrDto;
    }
于 2015-11-23T12:42:47.527 回答