javax.el.PropertyNotFoundException:/demo.xhtml@24,55 value="#{UserBean.favYear3}";:无法访问目标,标识符';UserBean';已解析为空
我想在JSF中有一个列表框。我已经写了一个简单的代码,但它不工作。在演示页面中,我看到一个带out列表的空框,在用户页面中,我有错误 UserBean.javajavax.el.PropertyNotFoundException:/demo.xhtml@24,55 value="#{UserBean.favYear3}";:无法访问目标,标识符';UserBean';已解析为空,java,eclipse,jsf,jakarta-ee,jsf-2,Java,Eclipse,Jsf,Jakarta Ee,Jsf 2,我想在JSF中有一个列表框。我已经写了一个简单的代码,但它不工作。在演示页面中,我看到一个带out列表的空框,在用户页面中,我有错误 UserBean.java @ManagedBean @SessionScoped public class UserBean implements Serializable{ public String favYear3;//list box public String getFavYear3() { return fav
@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>
怎么了?您必须使bean可访问/可管理。为此,你可以 使用CDI(
@Named
)或JSF(@ManagedBean
)注释对其进行注释:
@Named
@SessionScoped
public class UserBean implements Serializable{...}
或者在faces config.xml
中将其描述为托管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>
用户bean
com.example.UserBean
一场
EL中的托管bean名称错误。您已经声明了bean,如下所示:
@ManagedBean
@SessionScoped
public class UserBean implements Serializable{
当您没有指定@ManagedBean
的name
属性时,它将符合Javabeans命名约定,默认为第一个字符小写的类名,如souserBean
,但您试图用确切的类名{userBean}
引用它们。您需要相应地将此名称修改为#{userBean}
jsf2.x的
faces config.xml
注册是不必要的。删除它。,我以前做过,我编辑了这篇文章。我将你的代码添加到我的面部配置中。现在我没有错误,但它不工作。我的名单是空的,我不能select@Sami当前位置如果答案不能解决您的具体问题,则您不应立即将其标记为已接受。这只会让其他读者感到困惑。只有真正解决了具体问题的答案才会被接受。
<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>
@ManagedBean
@SessionScoped
public class UserBean implements Serializable{