さて、私は休止状態でのクラスレベルの検証に関するいくつかの問題(ここと他のサイト)を読み、アノテーションと検証クラスを作成しましたが、検証がfalseを返すと、クラスがそうではないという例外が発生します(検証がtrueを返すとき)有効(明らかに検証が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;
}
}
テストを行ったところ、Blockオブジェクトを受け取ったと確信しています。検証でtrueが返された場合は、falseを返してテストするだけです。
Block.java
@ValidBlock
public class Block{
...
}
とエラー:
重大:javax.validation.ConstraintViolationException:グループ[javax.validation.groups.Default、]の永続化時間中にクラス[com.labsys.model.Block]の検証に失敗しました制約違反のリスト:[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)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 orgでの.execute(EntityInsertAction.java:81)。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 org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:981)の.flush(SessionImpl.java:1214)275)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)org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:981)275)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)org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:981)
重大:JSF1073:javax.faces.event.AbortProcessingException obtido durante o processamento de INVOKE_APPLICATION 5:UIComponent-ClientId = blockForm:j_idt14、Message = javax.validation.ConstraintViolationException:永続化中にクラス[com.labsys.model.Block]の検証に失敗しましたグループの時間[javax.validation.groups.Default、]制約違反のリスト:[ConstraintViolationImpl {interpolatedMessage ='{app.ValidBlock.message}'、propertyPath =、rootBeanClass = class com.labsys.model.Block、messageTemplate = ' {app.ValidBlock.message}'}]重大:javax.validation.ConstraintViolationException:グループの永続化時間中にクラス[com.labsys.model.Block]の検証に失敗しました[javax.validation.groups.Default、]制約違反のリスト:[ConstraintViolationImpl {interpolatedMessage='{app.ValidBlock。メッセージ}'、propertyPath =、rootBeanClass = class com.labsys.model.Block、messageTemplate ='{app.ValidBlock.message}'}]