2012-06-13 47 views
2

我想在JSF中有一个列表框。我写了一个简单的代码,但它不起作用。在演示页面中,我看到一个带有列表和用户页面的空框,我有错误。javax.el.PropertyNotFoundException:/[email protected],55 value =“#{UserBean.favYear3}”:目标无法访问,标识符'UserBean'解析为空

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> 

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

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) 

什么是错?

回答

1

你必须使你的bean可达/管理。对于这一点,您可以

与CDI(@Named)或JSF(@ManagedBean)注释标注为:

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

或描述它在faces-config.xmlmanaged-bean这样的:

<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> 
+0

,我以前做过,我编辑的职位。 – samira

+0

我将你的代码添加到我的face-config中。现在我没有错误,但它不起作用。我的列表是空的,我不能选择 – samira

+2

@Sami:如果答案没有*不*解决您的具体问题,那么你不应该立即将其标记接受。这只会让其他读者感到困惑。只有在真正*解决了具体问题时,才接受接受的答案。 – BalusC

4

在EL你的托管bean的名字是错的。你已经声明了豆如下:

@ManagedBean 
@SessionScoped 
public class UserBean implements Serializable{ 

当你不指定@ManagedBeanname属性,那么它将符合JavaBeans的命名约定默认与第1个字符的类名小写像这样userBean,但但你试图用精确的类名#{UserBean}引用它们。您需要相应地修复此名称为#{userBean}

faces-config.xml注册为对于JSF 2.x不必要的。去掉它。

相关问题