2011-12-14 1 views
5

Я использую JSF 2.0, hibernate-validator4.2.jar validation-api.jar tomcat и Eclipse.Почему <f: validateBean /> не работает?

Я положил @Size(min=3, message="xxx") аннотацию в @ManagedBean и <f:validateBean /> между <h:inputText value="#{user.name}"></h:inputText>

Когда я пытаюсь запустить проект я получаю эту ошибку ...

exception 

javax.servlet.ServletException: Expression Error: Named Object: javax.faces.Bean not found. 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:606) 

root cause 

javax.faces.FacesException: Expression Error: Named Object: javax.faces.Bean not found. 
    com.sun.faces.application.ApplicationImpl.createValidator(ApplicationImpl.java:1593) 
    com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.createValidator(ValidatorTagHandlerDelegateImpl.java:244) 
    com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.applyAttachedObject(ValidatorTagHandlerDelegateImpl.java:132) 
    com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.applyNested(ValidatorTagHandlerDelegateImpl.java:211) 
    com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.apply(ValidatorTagHandlerDelegateImpl.java:87) 
    javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120) 
    javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137) 

почему? (Это появляется только тогда, когда я ставлю тег)

User.java

import java.io.Serializable; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import javax.validation.constraints.Size; 

@ManagedBean(name="user") 
@SessionScoped 
public class User{ 
    @Size(min=3, message="At least 3 characters!") 
    private String name; 


    public String getName() { 
     return nume; 
    } 
     public void setName(String name){ 
       this.name=name; 
    } 

} 

adduser.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core"> 

<ui:composition template="/templates/master_layout.xhtml"> 
    <ui:define name="text_header" >Panou de control: Adauga user </ui:define> 
    <ui:define name="content"> 
     <h:panelGrid columns="3"> 
      <h:outputText value="Name"></h:outputText> 
      <h:inputText value="#{user.name}"> 
       <f:validateBean /> 
      </h:inputText> 

      <h:commandButton value="Inregistreaza" action="index.xhtml"></h:commandButton> 
     </h:panelGrid> 
    </ui:define> 
</ui:composition> 
</html> 

ответ

5

Он должен работать прекрасно, хотя пустая <f:validateBean/> тег полностью лишними в этом контексте , Предполагается, что он будет использоваться для более точной проверки достоверности, такой как группировка проверки и/или отключение проверки неявного bean-компонента для каждого входа, путем указания необходимых атрибутов тега. Однако у вас нет атрибутов для этого тега, поэтому просто удалите этот тег. В случае установки JSF 2 + JSR 303 по умолчанию, он должен быть полностью прозрачным, не добавляя больше тегов JSF всякий раз, когда есть аннотация JSR 303 для свойства, такого как @Size и нравится.

Но я не думаю, что удаление тега решит это конкретное исключение. Ваша проблема кроется тем глубже. Предполагается, что этот валидатор будет автоматически зарегистрирован при запуске. Однако исключение в основном говорит о том, что валидатор вообще не зарегистрирован. С предоставленной информацией до сих пор невозможно дать целенаправленный ответ. Я могу думать о следующих возможных причинах:

  1. Ошибка в реализации JSF, которую вы используете. Обновите его до более новой версии.
  2. У вас есть несколько JSF-библиотек разных версий в вашем пути к классам. Очистите его.
  3. Объявление faces-config.xml корня не объявлено соответствующим JSF 2.x. Почини это.
+0

Проблема была в реализации JSF. Я загрузил другую версию и теперь отлично работает. Большое спасибо. Хороший день :) –

+0

Добро пожаловать. Но для записи (и моей любопытства), какую версию/версию у вас первоначально имело, и что у вас теперь есть? – BalusC

+0

Я использовал 2.1.4. Теперь 2.0.6 –