2014-09-02 4 views
0

I 다음 명령 클래스가 : 로고 이미지입니다명령 개체 검증 이상한 행동

class BookmakerCommand { 
    Bookmaker bookmaker 
    CommonsMultipartFile logotype 

     logotype validator: { val, obj -> 
      def logoImage = ImageIO.read(val.getInputStream()) 
      if (logoImage.width > 500 || logoImage.height > 500) { 
       obj.errors.reject('logotype.invalid', 'bookmaker.logo.invalid.format') 
      } 
     } 
} 

. 너비 나 높이에 잘못된 크기가있는 경우 로고 유형 필드를 거부해야합니다. 이 오류가 페이지 상단에이 목적을 위해 이러한 구조를 사용하여 표시 할 :

경우
<g:hasErrors bean="${command}"> 
     <ul class="errors" role="alert"> 
      <g:eachError bean="${command}" var="error"> 
       <li <g:if test="${error in org.springframework.validation.FieldError}">data-field-id="${error.field}"</g:if>><g:message error="${error}"/></li> 
      </g:eachError> 
     </ul> 
    </g:hasErrors> 

마권의 일부 필드는이 건설 해당 오류를 표시 유효하지 않습니다하지만 로고가없는 경우 그렇지 않은 경우 유효한. 나는 디버깅 시도하고이 줄을 발견 : 오류가 여전히 0 크기를 가지고 있기 때문에

obj.errors.reject('logotype.invalid', 'bookmaker.logo.invalid.format') 

실제로 개체를 명령하는 오류를 추가하지 않습니다. 내가 뭘 잘못하고있어? 감사합니다.

UPDATE :

내가 한 번 더 디버그하는 나는이 라인에 대한 완전히 옳지 않은 것을 발견 :

발리 코드 내
obj.errors.reject('logotype.invalid', 'bookmaker.logo.invalid.format') 

디버깅이 줄 명령에 해당 오류를 추가 보여줍니다 객체가 아니라 유효성 검사기 코드를 종료하고 컨트롤러로 돌아간 직후에 오류가 사라집니다.

if (!command.validate()) { 
     ... 
     } 

디버그 코드 검사기 간다 : 그래서 나는이 코드 조각에서 디버깅을 시작 (명령 객체가되는) 오류가 포함 된 OBJ 후

logotype validator: { val, obj -> 
       def logoImage = ImageIO.read(val.getInputStream()) 
       if (logoImage.width > 500 || logoImage.height > 500) { 
        obj.errors.reject('logotype.invalid', 'bookmaker.logo.invalid.format') 
       } 
      } 

를 ('bookmaker.logo.invalid.format ')하지만 디버그가 계속되면

if (!command.validate()) { 
     >> HERE 
     } 

command.errors가 다시 비게됩니다. 매우 이상한 :-(

나는, 당신이 당신의 유효성에 errors.reject()를 호출하지한다고 생각

답변

2

대신, false 또는 오류 코드를 반환해야합니다.

logotype validator: { val, obj -> 
    def logoImage = ImageIO.read(val.getInputStream()) 
    logoImage.width > 500 || logoImage.height > 500 ? 'bookmaker.logo.invalid.format' : true 
} 
+0

것 I가 해당 필드를 백라이트하려면이 작업 페이지의 의미는 다음과 같습니다.

+0

ref-doc에 나와있는 것처럼 전체 유효성 검사가 정확히 작동해야합니다. – injecteer

+0

동일한 필드에 여러 개의 오류 메시지를 표시하려면 작동합니까? 이미지에 두 가지 제약 조건이있는 경우 - 크기보다 크지 않고 크기가 같아야합니다. 시간에 해당 형식 (예 : jpg)이 있어야합니다. 그리고 사용자가 잘못된 크기와 형식으로 이미지를 업로드하면 두 개의 오류 메시지 또는 하나가 표시됩니까? 감사합니다 :-) –