2012-06-20 6 views
0

음, 최대 절전 모드로 클래스 수준 유효성 검사에 대한 여러 문제점 (여기 및 다른 사이트)을 읽었으며 주석 및 유효성 검사 클래스를 만들었지 만 유효성 검사가 false를 반환하면 예외가 발생합니다 확인) 클래스가 유효하지 않습니다 (분명히 유효성 검사가 false를 반환했기 때문에), 의심 스럽습니다. 유효성 검사 메시지도 반환하지 않았습니까? 왜 예외를 반환 코드 :최대 절전 클래스 수준 유효성 검사

ValidBlock.java

@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) 
@Retention(RetentionPolicy.RUNTIME) 
@Constraint(validatedBy = ValidBlockValidator.class) 
public @interface ValidBlock { 
    String message() default "{app.ValidBlock.message}"; 
    Class<?>[] groups() default {}; 
    Class<? extends Payload>[] payload() default {}; 
} 

ValidBlockValidator.java

public class ValidBlockValidator implements ConstraintValidator<ValidBlock, Block> { 

    @Override 
    public void initialize(ValidBlock aBlock) {} 

    @Override 
    public boolean isValid(Block value, ConstraintValidatorContext context) { 
     return false; 
    } 
} 

나는 테스트를했고 나는대로, 내가 블록 개체를 받았습니다 확신 유효성 검사가 true를 반환하면 괜찮습니다. 단지 false를 반환하여 테스트합니다.

Block.java

@ValidBlock 
public class Block{ 
    ... 
} 

및 오류 : 당신의 검증 프레임 워크 위해, ValidationMessages.properties 파일을 생성하고 클래스 패스의 루트에서 사용할 수 있도록 할 필요가

Grave: javax.validation.ConstraintViolationException: Validation failed for classes [com.labsys.model.Block] during persist time for groups [javax.validation.groups.Default, ] List of constraint violations:[ ConstraintViolationImpl{interpolatedMessage='{app.ValidBlock.message}', propertyPath=, rootBeanClass=class com.labsys.model.Block, messageTemplate='{app.ValidBlock.message}'} ] at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:159) at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:94) at org.hibernate.action.internal.EntityInsertAction.preInsert(EntityInsertAction.java:185) at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:81) at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:354) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:275) at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:326) at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52) at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1214) at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:981)

Grave: JSF1073: javax.faces.event.AbortProcessingException obtido durante o processamento de INVOKE_APPLICATION 5: UIComponent-ClientId=blockForm:j_idt14, Message=javax.validation.ConstraintViolationException: Validation failed for classes [com.labsys.model.Block] during persist time for groups [javax.validation.groups.Default, ] List of constraint violations:[ ConstraintViolationImpl{interpolatedMessage='{app.ValidBlock.message}', propertyPath=, rootBeanClass=class com.labsys.model.Block, messageTemplate='{app.ValidBlock.message}'} ] Grave: javax.validation.ConstraintViolationException: Validation failed for classes [com.labsys.model.Block] during persist time for groups [javax.validation.groups.Default, ] List of constraint violations:[ ConstraintViolationImpl{interpolatedMessage='{app.ValidBlock.message}', propertyPath=, rootBeanClass=class com.labsys.model.Block, messageTemplate='{app.ValidBlock.message}'} ]

+0

나는 내 자신의 프레임 워크를 만들지 않고 사용자 정의 유효성 검사 만하려고했습니다. http://docs.jboss.org/hibernate/validator/4.3/reference/en-US/html_single/#d0e341 –

+0

@Shahzeb - JSR303을 사용하여 사용자 정의 유효성 검사기를 만드는 방법입니다. – Perception

답변

1

사용자 정의 메시지를 추정하십시오.

+0

같은 메시지를 설정하더라도 : @ValidBlock (message = "That 's a error")? –

+0

Hibernate Validator는 플러시 시간 동안 에러를 발견 할 때 쓸모없는 메시지로 항상 당신에게 불쾌한 예외를 준다. 사용자 친숙성을 원하면 미리 검증기를 직접 실행해야합니다. 이 문제를 해결할 방법을 찾으면 나는 그것에 대해 듣고 싶어합니다. – Affe

+0

@Affe javax.validation.ConstraintViolationException 클래스를 살펴보십시오. 보시다시피 Set > constraintViolations 속성은 validator.validate (obj)를 수동으로 호출 할 때 반환되는 것과 동일한 결과입니다. 따라서이 예외를 포착하고 원하는대로 이러한 제약 조건을 사용해야합니다. – Beccari

관련 문제