5

I use JSF 2.0, hibernate-validator4.2.jar validation-api.jar tomcat and Eclipse.

I put @Size(min=3, message="xxx") annotation in a @ManagedBean and <f:validateBean /> between <h:inputText value="#{user.name}"></h:inputText>

When I try to run the project i get this 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)

why? (this only appears when i put 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>
BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
Iosif M.
  • 83
  • 1
  • 6

1 Answers1

5

It should work perfectly fine, although the empty <f:validateBean/> tag is entirely superfluous in this context. It's supposed to be used to "finetune" validation more, such as grouping of validation and/or disabling the implicit bean validation on a per-input basis by specifying the desired tag attributes. You have however no attributes on that tag, so just remove that tag altogether. On a default JSF 2 + JSR 303 project setup, it's supposed to kick in fully transparently without adding more JSF tags whenever there's a JSR 303 annotation on the property such as @Size and likes.

But I don't think that removing the tag will solve this particular exception. Your problem lies thus deeper. This validator is supposed to be auto-registered on startup. However, the exception basically tells that the validator is not registered at all. With the information given so far, it's not possible to give a targeted answer. I can think of the following possible causes:

  1. There's a bug in the JSF implementation which you're using. Upgrade it to a newer version.
  2. You have multiple JSF libraries of different versions in your classpath. Cleanup it.
  3. The faces-config.xml root declaration is not declared conform JSF 2.x. Fix it.
BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
  • The problem was the JSF implementation. I downloaded another version and now works fine. Thanks a lot. Have a nice day :) – Iosif M. Dec 14 '11 at 19:51
  • You're welcome. But for the record (and my curiousity) which implementation/version did you originally have and which do you now have? – BalusC Dec 14 '11 at 20:00
  • 1
    Oh? It should work equally good on 2.1.4. Even more, I tried to reproduce your problem here with Mojarra 2.1.4, Tomcat 7.0.22 and Hibernate Validator 4.2.0. It works flawlessly. That it works for you on 2.0.6 can only mean that your `web.xml` is not declared conform Servlet 3.0 spec, or that you're actually using Tomcat 6.0 instead of 7.0. JSF 2.1 namely requires Servlet 3.0. – BalusC Dec 14 '11 at 20:04
  • I just downloaded 2.1.4 and I tried again. Now it works! There is a difference of size between the old and the newer version of JSF 2.1.4. This makes me to think that the old jar is altered or they fixed that bug. I'm happy that works fine. Thanks again for your time :) – Iosif M. Dec 14 '11 at 20:21