2014-12-23 2 views
8

저는 내 프로젝트에 스프링 4.1, 하이버 네이트 검사기 5.1.3을 사용하고 있습니다. GroupSequence가 지난 2 일 동안 작동하도록 노력했습니다. 유효성 검사 의사, 블로그 및 stackoverflow에 게시 된 몇 가지 질문을 언급했습니다.콩 밸리데이션 그룹 시퀀스가 ​​작동하지 않습니다.

아래 클래스를 참조하십시오. 주석에서 GroupSequence 및 그룹을 제거하면 모든 유효성 검사 메시지가 함께 표시됩니다. 즉 이름 및 기타 필드에 대한 모든 검사가 함께 실행됩니다. 이름 필드에 대해 말하자면 - 먼저 @NotBlank와 @Size를 유효화 한 다음 이름을 Pattern과 일치시켜야하고 데이터베이스 호출 때문에 @UniqueName을 확인해야합니다.

문서 및 응답에서 제안 된대로 GroupSequence를 만들었습니다. 그러나 유효성 검사가 실행되면 @NotBlank 및 @Size 만 name에 대해 실행됩니다. 나머지 주석에서 그룹 값을 제거하면 작업이 시작되지만 모든 오류 메시지가 한 번에 표시되므로 원하지 않습니다.

그룹으로 지정된 어노테이션을 원합니다. First.class가 함께 실행되고 Second.class 유효성 검사가 시작됩니다. 그룹으로 지정된 유효성 검사가 해고되지 않는 이유는 알 수 없습니다.

나를 인도 해 주실 수 있습니까?


@GroupSequence({MyForm.class, OrderedChecks.class}) 
public class MyForm { 

    @NotBlank 
    @Size(min = 2, max = 40) 
    @Pattern(regexp = "^[\\p{Alnum} ]+$", groups = First.class) 
    @UniqueName(groups = Second.class)//Custom validation 
    private String name; 

    @NotBlank 
    @Size(min = 2, max = 40) 
    private String url; 

    @NotBlank 
    @Size(max = 100) 
    private String imagePath; 

    //Custom Validation 
    @CheckContent(acceptedType = <someString>, allowedSize=<someval>, dimensions=<someval> groups = Second.class) 
    private MultipartFile image 

... 
} 

@GroupSequence(value = {Default.class, First.class, Second.class}) 
public interface OrderedChecks {} 

@Controller 
@RequestMapping(value = "/myForm") 
public class MyFormController { 

    @RequestMapping(method = POST) 
    public String completeSignUp(@Valid @ModelAttribute("myForm") final MyForm myForm, 
          BindingResult result, RedirectAttributes redirectAttributes, Model model) { 

     if(result.hasErrors()) { 
      model.addAttribute(companyDetailsForm); 
      //ERROR_VIEW="myForm"; 
      return ERROR_VIEW; 
     } 
     // Doing something else. 
     return <success view>; 
    } 
} 
+0

누군가 해결 방법이나 내가 잘못하고있는 것에 대한 아이디어가 있습니까? – jay28

+0

유효성 검사가 예상대로 작동하지 않는 코드로 질문을 업데이트 할 수 있습니까 (예 : 컨트롤러 메소드)? – Khalid

+0

@Khalid가 컨트롤러 코드를 추가했으나 예상대로 작동하지 않습니다. 나는 그것을 작동시키기 위해 해킹을 사용해야 할 것이다. 나는 내 마음 속에 있지만, 해킹을하기보다는 봄 MVC에서 사용할 수있는 것을 찾고있다. 이 체크를 사용자 정의 주석에 넣어야하지만,이 경우에도 실패한 조건을 기반으로 네 개의 주석이있는 이름과 같은 필드에 대한 오류 메시지를 변경할 수 있는지 여부는 알 수 없습니다. 속성 파일에 오류 메시지를 정의했습니다. – jay28

답변

5

사용 봄의 @Validated 대신 @Valid. 이렇게하면 그룹을 지정하고 시퀀스를 제어 할 수 있습니다. 당신이 MyForm 콩의 상단에 @GroupSequence({MyForm.class, OrderedChecks.class}) 필요하지 않습니다

@RequestMapping(method = POST) 
public String completeSignUp(@Validated(OrderedChecks.class) @ModelAttribute("myForm") final MyForm myForm, 
         BindingResult result, RedirectAttributes redirectAttributes, Model model) { 
... 
} 

참고 :

은 당신의 컨트롤러 방법을 변경

.

+0

나는 그것을 시도했지만 지난 번에 작동하지 않았다. 나는 그것을 다시 시도 할 것이다. – jay28

+0

제안대로, 나는 변화를 만들었고 효과가 없었다. 그룹에 속한 검증은 해고되지 않습니다. – jay28

+0

그것은 나를 위해 일하고있다. 값이'@ Pattern'과'@ UniqueName' 제약 조건을 실제로 트리거 할 수 있는지 확인하십시오. 확실하다면, 스프링의 디버그 로깅을 켜고 힌트를 찾으십시오. – Khalid

관련 문제