JSF2 - javax.el.PropertyNotFoundException。不使用方法
Posted
技术标签:
【中文标题】JSF2 - javax.el.PropertyNotFoundException。不使用方法【英文标题】:JSF2 - javax.el.PropertyNotFoundException. Not working with methods 【发布时间】:2012-03-25 13:45:55 【问题描述】:当我尝试渲染视图时,浏览器显示此错误
01:46:11,371 GRAVE [javax.enterprise.resource.webcontainer.jsf.application] (http--127.0.0.1-8080-1) Error Rendering View[/index.xhtml]: javax.el.PropertyNotFoundException: /index.xhtml @15,74 value="#actividades.getAll": The class 'org.pfc.controller.principal.ActividadesController' does not have the property 'getAll'.
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
ActvidadController 代码
@ManagedBean(name="actividades")
@ViewScoped public class ActividadesController implements Serializable
private static final long serialVersionUID = 1L;
private final static Log logger=LogFactory.getLog(ActividadesController.class);
@ManagedProperty(value="#actividadBO")
private ActividadBO actividad;
public void setActividad(ActividadBO actividad)
this.actividad = actividad;
public List<Actividad> getAll()
logger.trace("ActividadesController.getAll");
return actividad.getAll();
查看代码
<h:body>
<ui:composition template="/WEB-INF/templates/main-template.xhtml">
<ui:define name="content">
<h:dataTable value="#actividades.getAll" var="actividad">
<h:column>
<f:facet name="header">
<h:outputText>Título</h:outputText>
</f:facet>
<h:outputText value="actividad.titulo"></h:outputText>
</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</h:body>
我使用 JBOSS 7,我的项目有 el-impl2.2.jar、el-api.1.1.jar 和 icefaces3 库。
我不明白为什么渲染不起作用。
有什么建议吗?
亲切的问候。
【问题讨论】:
【参考方案1】:这里,
<h:dataTable value="#actividades.getAll" var="actividad">
您的 EL 表达式无效。它正在寻找方法getGetAll()
,但您只有一个getAll()
方法,它表示(虚构)属性all
的getter。该属性根本不需要存在(它应该是private
)。
所以,要解决你的问题,它必须是
<h:dataTable value="#actividades.all" var="actividad">
或者,如果您使用的是 EL 2.2(但不推荐这种方式)
<h:dataTable value="#actividades.getAll()" var="actividad">
无论哪种方式,它都会调用正确的getAll()
方法。
与具体问题无关,顺便说一句,您的代码中存在另一个设计缺陷。 EL 需要多次调用 getter 来解决它。在 getter 方法中进行业务/数据库访问工作是个坏主意。 getter 应该只是返回 bean 属性。而是将 DB 作业移到 bean 的(后)构造函数中。
private List<Actividad> all;
@PostConstruct
public void init()
all = actividad.getAll();
public List<Actividad> getAll()
logger.trace("ActividadesController.getAll");
return all;
另见:
Why JSF calls getters multiple times【讨论】:
以上是关于JSF2 - javax.el.PropertyNotFoundException。不使用方法的主要内容,如果未能解决你的问题,请参考以下文章