javax.el.PropertyNotFoundException:/demo.xhtml @ 24,55 value =“#{UserBean.favYear3}”:目标无法访问,标识符’UserBean’已解析为null

我想在JSF中有一个列表框。 我写了一个简单的代码,但它不起作用。 在演示页面中,我看到一个带有列表的空框,在用户页面中我有错误。

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

      first jsf page   

JSF 2 check example

user.xhtml

      second jsf page      

我的问题:在演示页面我有一个空盒子。 在用户页面中错误是:

 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) 

怎么了?

您必须使您的bean可访问/管理。 为此,你也可以

使用CDI( @Named )或JSF( @ManagedBean )注释对其进行注释:

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

或者在faces-config.xml中将其描述为managed-bean如下所示:

  userBean com.example.UserBean session  

EL中的托管bean名称错误。 您已将bean声明如下:

 @ManagedBean @SessionScoped public class UserBean implements Serializable{ 

当你没有指定@ManagedBeanname属性时,它会将Javabeans命名约定默认符合类名,其中第一个字符是小写的,就像userBean ,但是你试图用确切的类名引用它们#{UserBean} 。 您需要相应地将此名称修改为#{userBean}

JSF 2.x 不需要 faces-config.xml注册。 去掉它。