javax.el.PropertyNotFoundException: /demo.xhtml @24,55 value="#{UserBean.favYear3}": Target Unreachable, identifier 'UserBean' resolved to null

11,446

Solution 1

You have to make your bean reachable/managed. For this, you can either

annotate it with a CDI (@Named) or a JSF (@ManagedBean) annotation:

@Named
@SessionScoped
public class UserBean implements Serializable{...}

or describe it in the faces-config.xml as a managed-bean like this:

<managed-bean>
  <managed-bean-name>userBean</managed-bean-name>
  <managed-bean-class>com.example.UserBean</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

Solution 2

Your managed bean name in EL is wrong. You've declared the bean as follows:

@ManagedBean
@SessionScoped   
public class UserBean implements Serializable{

When you don't specify the name attribute of the @ManagedBean, then it will conform the Javabeans Naming Conventions default to the classname with 1st character lowercased like so userBean, but yet you're trying to reference them with the exact classname #{UserBean}. You need to fix this name accordingly as #{userBean}.

The faces-config.xml registration is unnecessary for JSF 2.x. Remove it.

Share:
11,446
samira
Author by

samira

Updated on June 14, 2022

Comments

  • samira
    samira almost 2 years

    I want to have a list box in JSF. I have written a simple code but it does not work. In demo page I see an empty box with out list and in user page I have error.

    UserBean.java

    @ManagedBean
    @SessionScoped   
    public class UserBean implements Serializable{
        public String favYear3;//list box
    
        public String getFavYear3() {
            return favYear3;
        }
    
        public void setFavYear3(String favYear3) {
            this.favYear3 = favYear3;
        }
        public static class Year{
            public String yearLabel;
            public String yearValue;
    
            public Year(String yearLabel, String yearValue){
                this.yearLabel = yearLabel;
                this.yearValue = yearValue;
            }
    
            public String getYearLabel(){
                return yearLabel;
            }
    
            public String getYearValue(){
                return yearValue;
            }
    
        }
    
        public Year[] year3List;
    
        public Year[] getFavYear3Value() {
    
            year3List = new Year[3];
            year3List[0] = new Year("Year3 - 2000", "2000");
            year3List[1] = new Year("Year3 - 2010", "2010");
            year3List[2] = new Year("Year3 - 2020", "2020");
    
            return year3List;
        }
    
    }
    

    demo.xhtml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!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:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>first jsf page</title>
    </head>
    <h:body>
        <h1>JSF 2 check example</h1>
    
        <h:form>
            <h:selectOneListbox value="#{UserBean.favYear3}">
                <f:selectItems value="#{UserBean.favYear3Value}" var="y"
                    itemLabel="#{y.yearLabel}" itemValue="#{y.yearValue}" />
            </h:selectOneListbox>
        </h:form>
    
    </h:body>
    </html>
    

    user.xhtml

    <?xml version="1.0" encoding="utf-8" ?>
    <!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:h="http://java.sun.com/jsf/html">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>second jsf page</title>
    </head>
    <h:body>
        <h:outputText value="#{UserBean.favYear3}"/>
    </h:body>
    </html>
    

    My problem: in demo page I have an empty box. in user page the error is:

    type Exception report
    
    message 
    
    description The server encountered an internal error () that prevented it from fulfilling this request.
    
    exception 
    
    javax.servlet.ServletException: javax.el.PropertyNotFoundException: /demo.xhtml @24,55 value="#{UserBean.favYear3}": Target Unreachable, identifier 'UserBean' resolved to null
        javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)
    
    
    root cause 
    
    javax.faces.component.UpdateModelException: javax.el.PropertyNotFoundException: /demo.xhtml @24,55 value="#{UserBean.favYear3}": Target Unreachable, identifier 'UserBean' resolved to null
        javax.faces.component.UIInput.updateModel(UIInput.java:848)
        javax.faces.component.UIInput.processUpdates(UIInput.java:730)
        javax.faces.component.UIForm.processUpdates(UIForm.java:268)
        javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1109)
        javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1109)
        javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1218)
        com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:74)
        com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
        com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
        javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
    

    What is wrong?