#gwt #bean-validation
#gwt #проверка компонента
Вопрос:
Для текущего проекта мы используем аннотации 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-validation. Это позволяет нам проверять наши параметры на стороне клиента с помощью тех же аннотаций.
Однако, когда я аннотирую свои параметры своей пользовательской аннотацией и хочу проверить ее, используя GwtValidatorFactory , это не выдает мне ошибку, когда дата ввода находится в будущем.
Кто-нибудь сталкивался с определением и использованием своих собственных аннотаций в приложении GWT и может увидеть, чего мне не хватает?
Заранее спасибо
Ответ №1:
Вместо создания новых аннотаций вы можете попытаться переопределить средства проверки для существующих @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>
Вы можете узнать больше о пользовательских средствах проверки существующих ограничений в спецификации проверки компонента и справочном руководстве по проверке гибернации.
Ответ №2:
По-видимому, мы написали наши собственные реализации JavaScript для каждой пользовательской аннотации, поэтому решением в этом случае было написать такую реализацию.