0

내가 가지고 자바 빈즈 내부에 다음 코드를내 사용자의 접근은 사용되지 않습니다 만 필드 기본값은 최대 절전 모드 검사기에서 사용하는 대신

@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가 그 변수에 대한 접근자를 생성하지 않았다는 것을 두 번 확인했다.

아무도 도와 줄 수 있습니까?

P. 다음 ValidationMessages.properties 파일에서 다음 키가 해결되지 않기 때문에 나는 방법에 직접 @AssertTrue 주석을 넣을 수 없습니다 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"; 
     } 
... 
+0

콩 인증은 어떻게합니까? 어떤 응용 프로그램 계층에서 유효성 검사를 수행 하시겠습니까? 그리고 검증을 촉발시키는 것은 무엇입니까? 아니면 Bean Validation API를 직접 사용하여 유효성을 검사합니까? 유효성 검사를받는 bean에 대한 다른 제한 조건이 있습니까? 어쩌면 전체 콩을 게시 할 수 있습니까? – Hardy

+0

안녕하세요! 요청한대로 내 게시물을 수정했습니다. 네, 위에 나와있는 다른 제약이 있습니다. 추가 정보가 필요하면 알려주십시오. – balteo

답변

1

나는 당신이하려고하는 것을 지금 이해하고 있다고 생각합니다. 필드에 제약 조건을 배치하려고하지만 유효성 검사 중에 메서드 isAddressReferenceValid가 호출되거나 사용될 것으로 기대합니다. 그게 효과가 없을거야. 필드에 제약 조건을두면 액세스가 리플렉션을 사용하여 유효성을 검사하는 데 사용됩니다. 메서드/getter 메서드에 배치하면 액세스가 사용됩니다. 그래서 그는 주석의 배치가 중요합니다. 이미 주석을 메소드에 배치하는 것이 발견 된 것 같습니다. 물론 이것은 주석의 일관성없는 배치를 초래합니다. 당신은 할 수 :

  • 그냥 방법 주석에
  • 스위치가 완전히
  • 갱신 부울 주소 유형의 변경 (및 isAddressReferenceType 방법 제거)마다
  • 을 만들이 하나의 제약 조건에 대한 주석을 배치 주소 확인을위한 맞춤 제약 조건

몇 가지 아이디어가 있습니다. 그것은 모두 유스 케이스와 개인적인 취향에 달려 있습니다.

+0

Btw, 메시지 보간 문제와 관련하여 의견을 말하지 않습니다. – Hardy

+0

'이 단일 제약 조건에 대한 주석을 주석에 그냥 두십시오 .' 제대로 작동하는 것 같습니다. 메시지 보간 문제에 관한 한, 필드를 사용하지 않고 메서드를 사용하는 것만으로는 작동하지 않는다는 것을 알았습니다. 반사가 사용되는 것에 관해서는, 나는 그것을 모르고 있었다. .. 어떻게해서든지 고맙습니다. – balteo