【问题标题】:JSF2 - javax.el.PropertyNotFoundException. Not working with methodsJSF2 - javax.el.PropertyNotFoundException。不使用方法
【发布时间】: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 库。

我不明白为什么渲染不起作用。

有什么建议吗?

亲切的问候。

【问题讨论】:

    标签: jsf jsf-2 icefaces


    【解决方案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;
    }
    

    另见:

    【讨论】:

      猜你喜欢
      • 2015-04-20
      • 2011-10-05
      • 2011-11-16
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      • 2015-02-25
      • 2012-10-27
      • 1970-01-01
      相关资源
      最近更新 更多