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{
当你没有指定@ManagedBean
的name
属性时,它会将Javabeans命名约定默认符合类名,其中第一个字符是小写的,就像userBean
,但是你试图用确切的类名引用它们#{UserBean}
。 您需要相应地将此名称修改为#{userBean}
。
JSF 2.x 不需要 faces-config.xml
注册。 去掉它。