Raf*_*res 4 jsf icefaces jsf-2
当我尝试渲染视图时,浏览器显示此错误
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]
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
查看代码
<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>
Run Code Online (Sandbox Code Playgroud)
我使用JBOSS 7,我的项目有el-impl2.2.jar,el-api.1.1.jar和icefaces3库.
我不明白为什么渲染不起作用.
有什么建议?
亲切的问候.
Bal*_*usC 10
这里,
<h:dataTable value="#{actividades.getAll}" var="actividad">
Run Code Online (Sandbox Code Playgroud)
您的EL表达式无效.它正在寻找一种方法getGetAll(),但你只有一个getAll()方法来表示(虚构)属性的getter all.该属性根本不需要存在(它应该是private无论如何).
所以,要解决你的问题,一定是
<h:dataTable value="#{actividades.all}" var="actividad">
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是EL 2.2(但不推荐这种方式)
<h:dataTable value="#{actividades.getAll()}" var="actividad">
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,它都会调用正确的getAll()方法.
与具体问题无关,你的代码中存在另一个设计缺陷.EL需要多次调用getter才能解析它.在getter方法中执行业务/数据库访问作业是个坏主意.getter应该只返回bean属性.而是将DB作业移到bean的(post)构造函数中.
private List<Actividad> all;
@PostConstruct
public void init() {
all = actividad.getAll();
}
public List<Actividad> getAll(){
logger.trace("ActividadesController.getAll");
return all;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9430 次 |
| 最近记录: |