Использование пользовательских аннотаций проверки JavaScript в GWT - PullRequest
0 голосов
/ 06 октября 2011

Для текущего проекта мы используем аннотации JSR-303 для проверки параметров нашего интерфейса.

Мне нужно было создать пользовательскую аннотацию для дат, так как значения по умолчанию @Past и @Before также учитываютвремя.

Это определение моей аннотации:

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { NotInFutureValidator.class })
/**
 * Annotated element must be a date before tomorrow, compared to the system's date
 */
public @interface NotInFuture {
    String message() default "{be.credoc.contractRegistration.interface_v2.validation.pastignoretime}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

Реализация валидатора довольно проста.

Наше веб-приложение написано на GWT, и оно делаетиспользование gwt-проверки.Это позволяет нам проверять наши параметры на стороне клиента с помощью одних и тех же аннотаций.

Однако, когда я аннотирую свои параметры своей пользовательской аннотацией и хочу проверить ее с помощью GwtValidatorFactory, она не 'я не могу выдать ошибку, когда вводится дата в будущем.

Есть ли у кого-нибудь проблемы с определением и использованием своих собственных аннотаций в приложении GWT, и я вижу, что мне не хватает?

Спасибозаранее

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Вместо создания новых аннотаций вы можете попытаться переопределить валидаторы для существующих аннотаций @Past и @Future, предоставив сопоставление ограничения XML, например:

<?xml version="1.0" ?>
<constraint-mappings
    xmlns="http://jboss.org/xml/ns/javax/validation/mapping"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation=
        "http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd">

    <constraint-definition annotation="javax.validation.constraints.Past">
        <validated-by include-existing-validators="false">
            <value>x.y.z.NotInFutureValidator</value>
        </validated-by>
    </constraint-definition>
</constraint-mappings>

Это сопоставление должно быть зарегистрировано в файле конфигурации META-INF/validation.xml, например:

<?xml version="1.0" encoding="UTF-8"?>
<validation-config
    xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration validation-configuration-1.0.xsd">

    <constraint-mapping>META-INF/validation/custom-constraints.xml</constraint-mapping>

</validation-config>

Подробнее о пользовательских валидаторах для существующих ограничений вы можете узнать из спецификации Bean Validation и справочника Hibernate Validator .

0 голосов
/ 25 ноября 2011

Очевидно, мы написали свои собственные реализации JavaScript для каждой пользовательской аннотации, поэтому решением в этом случае было написать такую ​​реализацию.

...