如果我添加filteredValue属性,primefaces数据表中的commandLink将不起作用

时间:2018-07-13 13:49:15

标签: jsf primefaces datatable

我有一个素数数据表,每行中有一个<p:commandLink>。用户单击它可以看到另一个页面,其中包含有关所选记录的详细信息。在我向数据表中添加filteredValue之前,它一直运行良好。我需要此属性(filteredValue)才能正确过滤和排序我的数据表,如this question所示。

但是添加此属性后,我的commandLink停止工作。如何使用该属性?

这是我的数据表:

<p:dataTable var="prot" value="#{myBean.listaProtocolos}" rows="15" filteredValue="#{myBean.listaProtocolosFiltrados}" sortBy="#{prot.dataEntradaArea}" sortFunction="#{myBean.sortXMLDatas}" sortOrder="descending" paginator="true" style="font-size: 0.9em;" paginatorPosition="bottom">
  <p:column filterBy="${prot.nrProtocolo}" filterMatchMode="contains" width="8%" style="text-align:center">
    <f:facet name="header">ID</f:facet>
    <p:commandLink action="#{myBean.verDetalhesProtocolo}" process="@this messages" update="@this messages">
      <h:outputText value="#{prot.nrProtocolo}" style="text-decoration: underline;"/>
      <f:setPropertyActionListener target="#{myBean.nrProtocolo}" value="#{prot.nrProtocolo}" />
    </p:commandLink>
  </p:column>
(etc)

和myBean的相关部分:

public void verDetalhesProtocolo() {
    for(ProtocoloMY pro : this.listaProtocolos){
        if(pro.getNrProtocolo().trim().equalsIgnoreCase(this.nrProtocolo.trim())) {
            this.protocolo = new ProtocoloMY(pro);
            break;
        }
    }
    FacesContext facesContext = FacesContext.getCurrentInstance();
    facesContext.getExternalContext().redirect("detalhes_protocolo_processo.xhtml");
    //(This method isn't even called when I add the attribute filteredValue to my datatable)

public String getNrProtocolo() {
    return nrProtocolo;
}

public void setNrProtocolo(String nrProtocolo) {
    this.nrProtocolo = nrProtocolo;
}
    public List<ProtocoloMY> getListaProtocolos() {
    return listaProtocolos;
}

public List<ProtocoloMY> getListaProtocolosFiltrados() {
    return listaProtocolosFiltrados;
}

public void setListaProtocolosFiltrados(List<ProtocoloMY> listaProtocolosFiltrados) {
    this.listaProtocolosFiltrados = listaProtocolosFiltrados;
}

public void setListaProtocolos(List<ProtocoloMY> listaProtocolos) {
    this.listaProtocolos = listaProtocolos;
}

我几乎忘了说:单击链接时发生了一些网络流量,但是后端控制台中没有显示任何内容,并且没有调用bean中的方法。 browser's console indicating some data travelled to the backend

我正在运行primefaces v6.0。

1 个答案:

答案 0 :(得分:2)

要使PrimeFaces能够通过其唯一ID跟踪哪一行,您需要使用行POJO中使其唯一的值添加属性rowKey =“#{row.id}”到p:datatable中。 / p>