2015-03-20 4 views
1

У меня есть приложение JSF 2, и я не могу заставить работу проверять @Email на атрибут ManagedBean JSF.@Email hibernate аннотации проверки не работает в JSF 2 Bean

Это мой стек:

  • Glassfish 3.1.1
  • Mojarra 2.2.9/JSF 2,2

Я проверил в моем веб-Inf/класс У меня есть эти библиотеки а порекомендован here:

  • javax.validation: проверки-API: баночка: 1.0.0.GA
  • org.hibernate: гибернации-валидатор: баночка: 4.3.2.Final

Мой код:

<h:body> 
<!-- <h:log id="log" /> --> 
<h:messages globalOnly="true" style="color:red;margin:8px;" /> 

<h:form id="form"> 
    <f:validateBean> 
     <h:outputLabel for="email" value="Enter your email: " /> 
     <h:inputText id="email" value="#{userEditBean.email}" /> 
     <h:message for="email" /> 

     <h:commandButton type="submit" value="Enviar" 
      action="#{userEditBean.submit()}" /> 
    </f:validateBean> 
</h:form> 

Управляемая боб:

import javax.enterprise.context.SessionScoped; 
import javax.faces.bean.ManagedBean; 
import javax.validation.constraints.Pattern; 

@ManagedBean 
@SessionScoped 
public class UserEditBean { 

private static final String CURRENT_PAGE = ""; 
private static final String USER_LIST_PAGE = "userList"; 

//@Pattern(regexp = "[a-zA-Z0-9][email protected][a-zA-Z0-9]+\\.[a-zA-Z0-9]+", message = "Email format is invalid.") 
@Email(message = "Email format is invalid.") 
private String email; 


public String submit() { 
    return CURRENT_PAGE; 
} 


public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 
} 

Примечания:

  • Стандартные проверки JSR 303 (@Null, @NotNull, ...) работают отлично, я могу выполнить проверку электронной почты с помощью @Pattern, как показано here, но я хочу знать, почему другие аннотации проверки гибернации не работают.
  • Hibernate validator отлично работает, если я пытаюсь вставить модель с недопустимым адресом электронной почты в свойство, аннотированное с помощью @Email, hibernate выдает исключение в предварительной проверке.
  • Я пробовал аннотировать поле или геттер, как упоминалось here, ни один из них не работал.
  • Я прошел через hibernate validator reference integration chapter, но он просто говорит, что вы должны использовать тег для принудительной проверки.

Можно ли использовать дополнительные аннотации из валидатора спящего режима в компоненте JSF или только javax.validation.constraints. * Стандартные? (without using validator programmatically)

ОБНОВЛЕНО: 2015-03-23: в ответ на BalusC ответ:

Glassfish 3.1.1 поставляется с Hibernate-валидатор расслоением и это та же версия, я использую, я могу видеть это в журнале запуска сервера:

2015-03-23T14:11:24.772+0100|Información: Inicializando Mojarra 2.2.9 (-SNAPSHOT 20141218-0939 https://svn.java.net/svn/mojarra~svn/tags/[email protected]) para el contexto '/fwk4jsf' 
2015-03-23T14:11:25.368+0100|Información: HV000001: Hibernate Validator 4.3.2.Final 

И у меня также есть делегат = «истинный» в моем GlassFish-web.xml, но он не работает.

спасибо.

ответ

1

GlassFish как контейнер Java EE уже отправляется, среди прочего, с помощью JSF и Bean Validation. Обновление их должно быть выполнено путем замены JAR в папке /glassfish/modules.

Если это не представляется возможным по каким-то причинам, и вам действительно нужно обновить их через веб-приложение, то вам необходимо поручить GlassFish посмотреть в веб-приложение сначала для библиотек, добавив следующую запись в glassfish-web.xml:

<class-loader delegate="false" /> 

в противном случае GlassFish будет по-прежнему загружать их из собственной LIBS и/или загрузок классов проблем будут возникать, потому что есть повторяющиеся классы с тем же именем, что приводит к путанице и конфликты между библиотеками, в приложении с несколькими загрузчиками классов, такие как instanceof ложно возвращающиеся false на экземпляр класса, загруженного другим загрузчиком классов, имеющим доступ к дублированной библиотеке ичных.

+0

Это не сработало, у стеклянной рыбы такая же версия валидатора спящего режима, что и у меня в приложении. Я отредактировал вопрос. – kothvandir

+0

Почему вы поставляете его по webapp? – BalusC

+0

Хорошая точка !, У меня это было, потому что мне нужно, чтобы тесты работали, и я хотел быть уверенным, что это стандарт проверки на спящий режим и не модифицирован разработчиками Glassfish. Установив зависимость от предоставляемой, решена проблема, и теперь валидации работают. Спасибо!. – kothvandir

 Смежные вопросы

  • Нет связанных вопросов^_^