2011-12-14 2 views
5

Uso JSF 2.0, hibernate-validator4.2.jar validation-api.jar tomcat ed Eclipse.Perché <f: validateBean /> non funzionerà?

ho messo @Size(min=3, message="xxx") annotazione in un @ManagedBean e <f:validateBean /> tra <h:inputText value="#{user.name}"></h:inputText>

Quando provo ad eseguire il progetto ottengo questo errore ...

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) 

perché? (Appare solo quando ho messo 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> 

risposta

5

Dovrebbe funzionare perfettamente soddisfacente, sebbene il <f:validateBean/> tag vuoto è del tutto superflua in questo contesto . Dovrebbe essere usato per "finetune" di validazione di più, come il raggruppamento di validazione e/o disabilitazione della convalida del bean implicito su una base per input, specificando gli attributi di tag desiderati. Tuttavia non hai attributi su quel tag, quindi rimuovi del tutto quel tag. In una configurazione di progetto JSF 2 + JSR 303 predefinita, si suppone che passi in modo completamente trasparente senza aggiungere altri tag JSF ogni volta che c'è una annotazione JSR 303 sulla proprietà come @Size e Mi piace.

Ma non penso che rimuovere il tag risolverà questa particolare eccezione. Il tuo problema si trova così più profondo. Questo validatore dovrebbe essere registrato automaticamente all'avvio. Tuttavia, l'eccezione dice fondamentalmente che il validatore non è registrato affatto. Con le informazioni fornite finora, non è possibile dare una risposta mirata. Posso pensare alle seguenti possibili cause:

  1. C'è un bug nell'implementazione JSF che stai usando. Aggiornare a una versione più recente.
  2. Nel tuo classpath sono presenti più librerie JSF di versioni diverse. Pulirlo
  3. La dichiarazione radice faces-config.xml non è dichiarata conforme JSF 2.x. Aggiustalo.
+0

Il problema era l'implementazione JSF. Ho scaricato un'altra versione e ora funziona bene. Molte grazie. Buona giornata :) –

+0

Prego. Ma per la cronaca (e la mia curiosità) quale versione/versione hai avuto in origine e quale hai ora? – BalusC

+0

Stavo usando 2.1.4. Ora 2.0.6 –