2012-04-03 3 views
0

Я делаю веб-приложение с использованием Spring 3.1.0.RELEASE, JSF 2.x, JPA 2 с поставщиком гибернации. Приложение работает на Tomcat 6.X.Проверка фасов mutli lang сообщение fail

Веб-приложение может быть показано на разных языках: 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 не делает?

Спасибо.

ответ

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

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

@email

поля/свойства. Нужно быть строкой.

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

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

+0

Извините, я не уверен, что вы ответите на мой вопрос. –

0

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

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