Ошибка проверки MULI LANG - PullRequest
       37

Ошибка проверки MULI LANG

0 голосов
/ 03 апреля 2012

Я делаю веб-приложение, используя Spring 3.1.0.RELEASE, JSF 2.x, JPA 2 с провайдером Hibernate.Приложение запускается на Tomcat 6.X.

Веб-приложение может отображаться на разных языках: en, es, fr.

Я использую проверку бинов в своих сущностях.Hibernate Validator является поставщиком, версия 4.2.0.Final.

У меня есть следующий код в сущности:

@Email
    @Size(max=255)
    @Column(name = "email_ceo", length = 255)
    private String emailCeo;

@NotEmpty
    @OrderBy("position ASC")
    @OneToMany(cascade = ALL, mappedBy = "site", fetch = FetchType.EAGER)
    private List<SiteLanguage> langs;

Я обработал исключение следующим образом:

try {
            siteService.createSite(newSite);
        } catch (ConstraintViolationException ex) {
            final FacesContext facesContext = FacesContext.getCurrentInstance();
            for (ConstraintViolation<?> cv : ex.getConstraintViolations()) {
                facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, cv.getMessage(), null));
            }
        }

Я отображаю сообщение об ошибке в шаблоне, используя <h:messages />

Как получить переведенное сообщение, потому что cv.getMessage() всегда возвращает английское сообщение?

Для электронной почты это работает нормально, у меня есть сообщение на хорошем языке.

Есть еще одна вещь, я не понимаю:

Почему @NotEmpty выбрасываетConstraintViolationException и @Email нет?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2012

Вместо cv.getMessage () используйте cv.getMessageTemplate (), он будет возвращать определенный в шаблоне сообщения ограничения, например.{Javax.validation.constraints.NotNull.message}.Если у вас есть файл ResourceBundle (предоставляется с реализацией Bean Validation или ваш собственный), вы можете получить сообщение на выбранном языке.

@ Email не является встроенным ограничением Bean Validation, поэтому JSF не будет инициировать его.2,0.Напишите собственное ограничение @Email (или оберните его, предоставленное Hibernate Validator), чтобы оно было распознано при проверке компонентов.

0 голосов
/ 03 апреля 2012
  1. Использовать локаль.То, как мы это делали, в основном состоит из строк локали на любом языке в таблице и на основе используемой локали (en, fr) захватывает ее.

  2. Поймать все исключенияс catch Exception e затем посмотрите на тип, который выдается.Он поймает его по порядку и продолжит из пункта catch.Итак, первое сгенерированное исключение выйдет из блока try.

@ Email

field / property.Должна быть строкой.

Проверить, является ли указанная строка действительным адресом электронной почты.

http://docs.jboss.org/hibernate/validator/4.0.1/api/org/hibernate/validator/constraints/Email.html

...