JSF2 - javax.el.PropertyNotFoundException. Not working with methods JSF2 - javax.el.PropertyNotFoundException。无法处理方法

4
当我尝试渲染视图时,浏览器显示此错误。
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个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
11

在这里,

<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() 方法。


与具体问题无关 ,你的代码中还存在另一个设计缺陷。getter方法被调用的次数取决于EL解析所需的次数。在 getter 方法内部执行业务/数据库访问操作是一个不好的想法。getter 应该只返回 bean 的属性。最好将数据库操作移到bean的(post)constructor中。

private List<Actividad> all;

@PostConstruct
public void init() {
    all = actividad.getAll();
}

public List<Actividad> getAll(){
    logger.trace("ActividadesController.getAll");
    return all;
}

另请参见:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,