Primefaces Datatable不起作用

时间:2012-11-30 19:34:24

标签: java jsf primefaces

当我运行下面的代码时,Apache Tomcat Log说:

Property 'recuClientes' not found in type com.swc.rc.recu.UtilsRecu

webPage返回No records found.

任何建议?

这是电话

<p:outputPanel>
    <h:form>  
        <p:dataTable var="rec" value="#{rc.recu}">  
            <p:column headerText="recu">  

                <h:outputText value="#{rec.deudor}" />  


            </p:column>  
        </p:dataTable>  
    </h:form>
</p:outputPanel>

这是来源, 我可以使用它,不是吗?

@XmlTransient
public Collection<Procs> getProcsCollection() {
    return procsCollection;
}

public void setProcsCollection(Collection<Procs> procsCollection) {
    this.procsCollection = procsCollection;
}

这是managedBean ..

@ManagedBean(name = "rc")
@SessionScoped
public class UtilsRecu {

    private Clientes cliente=new Clientes();

    private List <Procs> recu=new LinkedList<Procs>(); 



    public void recuClientes(){

        recu=(List<Procs>) cliente.getProcsCollection();

    }        

    public void setRecu(List<Procs> recu) {

        this.recu= recu;
    }

    public List<Procs> getRecu() {
        recuClientes();
        return recu;
    }


}

谢谢..

1 个答案:

答案 0 :(得分:0)

您遇到的异常不是由到目前为止显示的Facelets代码引起的。这是由于同一页面中其他地方#{rc.recuClientes}的使用不正确造成的。也许你已经将它放在模板文本中,如此

#{rc.recuClientes}

并希望它会在加载时执行该方法。但它不会那样工作。它将被解释为一个值表达式,因此它将寻找一个getter方法getRecuClientes(),它返回一些可以打印到输出的东西。但是因为这样的getter方法不存在,所以你所面临的“属性未找到”异常就会被抛出。

鉴于此方法执行某些业务逻辑(填充列表),应该由某些操作组件调用,例如<h:commandButton>

<h:form>
    <h:commandButton value="Submit" action="#{rc.recuClientes}" />
</h:form>

或者,如果您打算在初始GET请求期间调用它,则只需使用@PostConstruct对其进行注释,而无需在视图中的任何位置引用它。

@PostConstruct
public void recuClientes() {
    recu = (List<Procs>) cliente.getProcsCollection();
}        

这样它将在bean构造之后直接调用。

顺便说一句,演员阵容是一种代码气味。在设计良好的代码中,您不应该在此特定构造中使用该转换。