javax.el.PropertyNotFoundException: /demo.xhtml @24,55 value="#{UserBean.favYear3}": Target Unreachable, identifier 'UserBean' resolved to null
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.
samira
Updated on June 14, 2022Comments
-
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?