2011-12-14 7 views
5

Uso JSF 2.0, hibernate-validator4.2.jar validation-api.jar tomcat y Eclipse.¿Por qué <f: validateBean /> no funcionará?

puse @Size(min=3, message="xxx") anotación en un @ManagedBean y <f:validateBean /> entre <h:inputText value="#{user.name}"></h:inputText>

Cuando trato de ejecutar el proyecto me sale este error ...

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) 

por qué? (Esto sólo aparece cuando pongo la etiqueta)

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> 

Respuesta

5

Debería funcionar perfectamente bien, aunque el <f:validateBean/> etiqueta vacía es totalmente superfluo en este contexto . Se supone que debe utilizarse para "validar mejor" la validación más, como la agrupación de la validación y/o la desactivación de la validación implícita del bean por cada entrada especificando los atributos de etiqueta deseados. Sin embargo, no tiene atributos en esa etiqueta, así que simplemente elimine esa etiqueta por completo. En una configuración de proyecto JSF 2 + JSR 303 predeterminada, se supone que debe activarse de forma totalmente transparente sin agregar más etiquetas JSF siempre que haya una anotación JSR 303 en la propiedad como @Size y "me gusta".

Pero no creo que la eliminación de la etiqueta resuelva esta excepción en particular. Tu problema es mucho más profundo. Se supone que este validador se autoregistre al inicio. Sin embargo, la excepción básicamente dice que el validador no está registrado en absoluto. Con la información dada hasta ahora, no es posible dar una respuesta específica. Puedo pensar en las siguientes causas posibles:

  1. Hay un error en la implementación de JSF que está utilizando. Actualízalo a una versión más nueva.
  2. Tiene varias bibliotecas JSF de diferentes versiones en su classpath. Limpiarlo.
  3. La declaración de raíz faces-config.xml no se declara conforme con JSF 2.x. Arreglalo.
+0

El problema fue la implementación de JSF. Descargué otra versión y ahora funciona bien. Muchas gracias. Que tengas un buen día :) –

+0

De nada. Pero para el registro (y mi curiosidad) ¿qué implementación/versión tenías originalmente y cuál tienes ahora? – BalusC

+0

Estaba usando 2.1.4. Ahora 2.0.6 –

Cuestiones relacionadas