我目前正在尝试使用JSF编写一个使用EJB会话bean来调用数据库(MySQL)的应用程序,但是当我尝试访问该页面时,我收到的错误是
The class 'model.PlanetQueryManagedBean$Proxy$_$$_WeldClientProxy' does not have the property 'getPlanets'.
JSF页面的代码如下:
<?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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<h:dataTable value="#{planetQueryManagedBean.getThePlanets}" var="pln">
<h:column>
<f:facet name="header">Name</f:facet>
#{pln.name}
</h:column>
<h:column>
<f:facet name="header">Description</f:facet>
#{pln.desc}
</h:column>
</h:dataTable>
</h:form>
</h:body>
</html>
JSF托管bean的代码是:
package model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Named;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
@Named
@SessionScoped
public class PlanetQueryManagedBean implements Serializable {
@EJB
private QueryBean thePlanets;
public List<Planets> getThePlanets() {
return thePlanets.getListofPlanets();
}
}
最后,EJB Session bean:
package model;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
@Stateless
public class QueryBean {
@PersistenceContext(name="PlanetsORM")
EntityManager em;
public QueryBean() {
}
public List<Planets> getListofPlanets() {
TypedQuery<Planets> theQuery = em.createQuery("select p from Planets p", Planets.class);
List<Planets> result = theQuery.getResultList();
return result;
}
}
我已经将Core JavaServer Faces这本书作为主要来源了解,据我所知,这是应该做的。当然,我也仔细查看了Stack Overflow问题,但我找不到任何可以帮助我的东西。
我发现如果EJB未成功实例化,可能会发生类似这样的事情,但我真的不知道如何找到它......
我使用GlassFish 4.0作为应用服务器,Eclipse作为我的IDE。
有人能帮帮我吗?或者至少帮助我找出如何更好地理解错误?
致以最诚挚的问候,
托拜厄斯
答案 0 :(得分:0)
属性可以有一个setter和一个getter。您必须在没有get或set的情况下引用该属性,并使用小写的第一个字母:
#{planetQueryManagedBean.thePlanets}