0

さて、私は休止状態でのクラスレベルの検証に関するいくつかの問題(ここと他のサイト)を読み、アノテーションと検証クラスを作成しましたが、検証が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}'}]

4

1 に答える 1

1

ValidationMessages.properties検証フレームワークがカスタムメッセージを推定するには、ファイルを作成してクラスパスのルートで使用できるようにする必要があります。

于 2012-06-20T23:29:19.390 に答える