我尝试使用Glassfish作为app服务器构建简单的JSF应用程序,并且它已经开始但是之后发生了这个错误:
javax.el.PropertyNotFoundException: /index.xhtml @10,75 value="#{bean.genre}": Target Unreachable, identifier 'bean' resolved to null
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)....
我尝试将我的Bean注释更改为@Model并尝试了不同类型的Scopes,但这并没有帮助。
这是我的index.xhtml页面:
<!DOCTYPE html>
<html xmlns="http://www.w3c.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<h:body>
<h:form id="genreForm">
<h:outputLabel for="genre" value="genre" />
<h:inputText id="genre" value="#{bean.genre}" label="genre" />
<br/><br/>
<p:commandButton action="#{bean.addGenre}" update="genreList"
value="Add genre" icon="ui-icon-check" style="margin:0"/>
<br/>
<br/>
<h:dataTable id="genreList" value="#{bean.getGenreList()}" var="g" border="1">
<h:column>
<f:facet name="header">
Genre id
</f:facet>
#{g.genreId}
</h:column>
<h:column>
<f:facet name="header">
Name
</f:facet>
#{g.genre}
</h:column>
</h:dataTable>
</h:form>
</h:body>
这是我的Bean:
@ManagedBean(name = "Bean", eager = true)
@SessionScoped
public class Bean {
private int genreId;
private String genre;
public void addGenre() {
GenreDAO dao = new GenreDAOImpl();
Genre myGenre = new Genre();
myGenre.setGenre(genre);
dao.save(myGenre);
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public int getGenreId() {
return genreId;
}
public void setGenreId(int genreId) {
this.genreId = genreId;
}
public List<Genre> getGenreList() {
GenreDAO dao = new GenreDAOImpl();
List<Genre> list = dao.findAll();
return list;
}
}
答案 0 :(得分:1)
默认情况下,如果未在@ManagedBean注释中提供托管bean名称,则用于访问bean的表达式语言表达式不应以首字母为小写字母开头。例如,如果您有以下托管bean声明
@ManagedBean
public class Bean {
//some fields and methods
}
然后你应该以小写的第一个字母访问你的bean
<h:inputText value="#{bean.somePropertyName}">
但您可以通过@ManagedBean注释name
属性自定义用于引用bean的名称。在这种情况下,用于引用bean的EL表达式应该拼写您的name
属性中提供的bean名称完全,包括第一个信件。所以如果你的代码中有这个
@ManagedBean (name="Bean")
public class Bean
你的bean应该像这样访问
<h:inputText value="#{Bean.somePropertyName}">
答案 1 :(得分:0)
@ManagedBean(name = "Bean", eager = true)
在这里,您将bean的名称设置为“Bean”,但是您尝试在el中将其作为“bean”访问。改变他们中的任何一个,让它工作。