음, 최대 절전 모드로 클래스 수준 유효성 검사에 대한 여러 문제점 (여기 및 다른 사이트)을 읽었으며 주석 및 유효성 검사 클래스를 만들었지 만 유효성 검사가 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}'} ]
나는 내 자신의 프레임 워크를 만들지 않고 사용자 정의 유효성 검사 만하려고했습니다. http://docs.jboss.org/hibernate/validator/4.3/reference/en-US/html_single/#d0e341 –
@Shahzeb - JSR303을 사용하여 사용자 정의 유효성 검사기를 만드는 방법입니다. – Perception