我的自定义访问是从未使用过,只有场默认值由Hibernate验证,而不是
我有一个JavaBean中下面的代码:我的自定义访问是从未使用过,只有场默认值由Hibernate验证,而不是
@AssertTrue private boolean addressReferenceValid;
public boolean isAddressReferenceValid() {
if (addressType.equals(AddressType.ON_THE_FLY_ADDRESS) && StringUtils.isEmpty(addressReference)) {
return false;
}
return true;
}
我的问题是,isAddressReferenceValid访问是永远使用,似乎只使用默认值addressReferenceValid(即false
)。
我重复检查了Spring Roo没有为该变量生成自己的访问器。
任何人都可以请帮忙吗?
附:我不能直接把@AssertTrue注释的方法,因为再ValidationMessages.properties
文件中的下列键将无法得到解决:AssertTrue.familyAdvertisementSearchCriteriaInfo.addressReferenceValid
编辑1:
全豆:
@RooEquals @RooJavaBean
public class FamilyAdvertisementSearchCriteriaInfo {
@Valid
private FamilyAdvertisementSearchCriteria searchCriteria;
private Address currentAddress;
private String addressReference;
@NotNull
private AddressType addressType;
@AssertTrue(groups=Default.class)
private boolean addressReferenceValid;
public boolean isAddressReferenceValid() {
if (addressType.equals(AddressType.ON_THE_FLY_ADDRESS) && StringUtils.isEmpty(addressReference)) {
return false;
}
return true;
}
}
验证发生在以下控制器中:
@RequestMapping(value = "/familyAdvertisementSearch", method = RequestMethod.POST, produces = "text/html") public String familyAdvertisementSearchResults(@ModelAttribute @Validated(Default.class) FamilyAdvertisementSearchCriteriaInfo familyAdvertisementSearchCriteriaInfo, BindingResult bindingResult, Model model) {
if(bindingResult.hasErrors()){
populateModel(model);
familyAdvertisementSearchCriteriaInfo.setCurrentAddress(memberService.retrieveCurrentMemberAddress());
return "search/familyAdvertisementSearchForm";
}
...
回答:
我想我现在明白你想要做什么。您希望将约束放在字段上,但在验证期间,您期望调用/使用方法isAddressReferenceValid。这是行不通的。如果在字段上放置约束,则使用访问来获取属性以进行验证(使用反射)。如果您将它放在方法/ getter方法上,则使用访问权限。所以他注释的位置很重要。您似乎已经发现将注释放置在方法的作品中。当然,这会导致注释的位置不一致。你可以:
- 只要将注释此单约束
- 开关方法的注释完全 每个地址类型的变化(和摆脱isAddressReferenceType方法)时
- 更新布尔创建用于验证地址的自定义约束参考
只是一些想法。这一切都取决于你的用例和个人喜好。
以上是 我的自定义访问是从未使用过,只有场默认值由Hibernate验证,而不是 的全部内容, 来源链接: utcz.com/qa/263881.html