Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的自定义访问器从未使用过,hibernate validator只使用字段默认值_Java_Spring_Spring Roo_Bean Validation_Hibernate Validator - Fatal编程技术网

Java 我的自定义访问器从未使用过,hibernate validator只使用字段默认值

Java 我的自定义访问器从未使用过,hibernate validator只使用字段默认值,java,spring,spring-roo,bean-validation,hibernate-validator,Java,Spring,Spring Roo,Bean Validation,Hibernate Validator,我在javabean中有以下代码: @AssertTrue private boolean addressReferenceValid; public boolean isAddressReferenceValid() { if (addressType.equals(AddressType.ON_THE_FLY_ADDRESS) && StringUtils.isEmpty(addressReference)) { return false;

我在javabean中有以下代码:

@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

我仔细检查了SpringRoo没有为该变量生成自己的访问器

有人能帮忙吗

p.S.我无法将@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上,则使用access方法。所以他认为注释的位置很重要。正如您已经发现的,在方法上放置注释是有效的。当然,这会导致注释的位置不一致。你可以:

  • 只需放置此单个约束的注释
  • 完全切换到方法注释
  • 每次地址类型更改时更新布尔值(并去掉isAddressReferenceType方法)
  • 创建用于验证addressReference的自定义约束

只是一些想法。这完全取决于您的用例和个人偏好

如何进行bean验证?您希望在应用程序的哪一层进行验证?什么触发了验证?还是直接使用Bean验证API进行验证?您的bean上是否有其他正在被验证的约束?也许你可以发布全文?嗨,哈迪!我已按要求编辑了我的帖子。是的,还有如上所示的其他禁忌。如果您需要进一步的信息,请告诉我……顺便说一句,我不理解您对消息插值问题的评论。
只需将注释放在该方法上,就可以解决此单一约束问题。
似乎很好。至于消息插值问题,我注意到仅仅使用不带字段的方法是行不通的。至于正在使用的反射,我不知道。。。无论如何,非常感谢。