Слушатель валидатора Seam / Hibernate - PullRequest
1 голос
/ 21 апреля 2009

Мы используем стандартную настройку SEAM здесь ... в комплекте с системой проверки, которая использует спящий режим.

В основном, что происходит, когда пользователь вводит значение в html-ввод и шов проверяет введенное значение, используя проверку гибернации.

Работает нормально по большей части, за исключением вот моей проблемы: нам нужно записать результаты проверки для каждого поля, и я не могу найти хороший способ сделать это ... в идеале это было бы сделано через общение с Система проверки шва / гибернации и просто запись результатов проверки, но, насколько я могу судить, нет способа сделать это?

Кто-нибудь делал что-то подобное в прошлом? Есть несколько неприятных способов работы, но я бы предпочел сделать это чисто.

Просто краткий обзор процесса, который у нас происходит сейчас для контекста:

1) пользователь вводит значение поля 2) значение onblur устанавливается с помощью ajax (a4j: support), в этот момент валидаторы запускаются, и div повторно отображается, если произошли какие-либо ошибки проверки, они теперь видны на странице

Я хотел бы, чтобы на шаге 2 происходило «ValidationListener» или что-то подобное, что позволило бы нам записать результаты проверки.

Спасибо, если кто-нибудь сможет помочь: o

Ответы [ 2 ]

2 голосов
/ 21 апреля 2009

Вы должны быть в состоянии сделать это, создав Бин, у которого есть метод, наблюдающий событие org.jboss.seam.validationFailed. Затем этот метод может делать любые записи, которые вы хотите.

@Name("validationObserver")
public class ValidationObserver() {

    @Observer("org.jboss.seam.validationFailed")
    public void validationFailed() {
        //Do stuff
    }
}

Событие validationFailed не передает никаких параметров, поэтому вам придется опросить FacesMessages или, возможно, саму платформу Hibernate Validation, если вы хотите записать, что было ошибкой.

0 голосов
/ 20 мая 2009

Если вы используете только Hibernate для проверки, вы можете использовать Hibernate ClassValidator в методе validationFailed (), как рекомендует Damo.
Пример:

    public <T> InvalidValue[] validateWithHibernate(T object) {
        ClassValidator<T> validator = new ClassValidator(object.getClass());
        InvalidValue[] invalidValues = validator.getInvalidValues(object);
        return invalidValues;
    }
...