2011-12-14 8 views
5

Używam JSF 2.0, hibernate-validator4.2.jar validation-api.jar tomcat i Eclipse.Dlaczego <f: validateBean /> nie działa?

kładę @Size(min=3, message="xxx") adnotacji w @ManagedBean i <f:validateBean /> między <h:inputText value="#{user.name}"></h:inputText>

Kiedy próbuję uruchomić projekt otrzymuję ten błąd ...

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) 

dlaczego? (Tylko ten pojawia się, gdy mogę umieścić tag)

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> 

Odpowiedz

5

Powinien działać perfekcyjnie, choć pusty <f:validateBean/> tag jest całkowicie zbędne w tym kontekście . To powinno być używane do bardziej szczegółowego sprawdzania poprawności, na przykład grupowania sprawdzania poprawności i/lub wyłączania niejawnej weryfikacji walidacji na podstawie danych wejściowych przez określenie pożądanych atrybutów znaczników. Nie masz jednak żadnych atrybutów na tym tagu, więc po prostu całkowicie usuń ten tag. Przy domyślnym ustawieniu projektu JSF 2 + JSR 303 ma ono w pełni działać w sposób przezroczysty, bez dodawania kolejnych znaczników JSF, gdy w obiekcie istnieje adnotacja JSR 303, na przykład @Size i podobieństwa.

Ale nie sądzę, że usunięcie znacznika rozwiąże ten wyjątek. Twój problem leży głębiej. Ten weryfikator powinien być automatycznie rejestrowany podczas uruchamiania. Jednak wyjątek zasadniczo mówi, że weryfikator w ogóle nie jest zarejestrowany. Z podanymi do tej pory informacjami nie można podać ukierunkowanej odpowiedzi. Mogę wymyślić następujące możliwe przyczyny:

  1. Występuje błąd w implementacji JSF, której używasz. Uaktualnij go do nowszej wersji.
  2. Masz wiele bibliotek JSF różnych wersji w swojej ścieżce klas. Oczyść to.
  3. Deklaracja podstawowa faces-config.xml nie jest uznana za zgodną JSF 2.x. Napraw to.
+0

Problemem było wdrożenie JSF. Pobrałem inną wersję i teraz działa dobrze. Wielkie dzięki. Miłego dnia :) –

+0

Nie ma za co. Ale dla rekordu (i mojej ciekawości), którą wersję/wersję pierwotnie posiadałeś i którą masz teraz? – BalusC

+0

Używałem 2.1.4. Teraz 2.0.6 –