Primefaces 2.2.1,似乎不接受同一页面上的两个表

时间:2011-06-20 16:24:10

标签: jsf jsf-2 primefaces

我敦促你们的支持。

我正在使用JSF 2.0。 Primefaces和2.2.1。

当选择另一个<p:datatable>上的行时,我需要更新<p:datatable>。两者都在同一页上。

当选择客户时,希望显示各自的各方。

注意:不想在我的EntityBean中使用FetchType.EAGER。

以下是代码:

clients.xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
<html xmlns="http://www.w3.org/1999/xhtml"  
      xmlns:h="http://java.sun.com/jsf/html"  
      xmlns:f="http://java.sun.com/jsf/core"  
      xmlns:ui="http://java.sun.com/jsf/facelets"  
      xmlns:p="http://primefaces.prime.com.tr/ui">  

<body>  
  <h:form>
    <p:dataTable id="clientsTable" var="c" value="#{clientMB.clients}" paginator="true"  
        rows="10" selection="#{clientMB.selected}" selectionMode="single"
    onRowSelectUpdate="partiesTable">  
        <p:column>  
            <f:facet name="header">  
                <h:outputText value="Código" />  
            </f:facet>  
            <h:outputText value="#{c.id}" />  
        </p:column>  

        <p:column>  
            <f:facet name="header">  
                <h:outputText value="Nome" />  
            </f:facet>  
            <h:outputText value="#{c.nome}" />  
        </p:column>  

        <p:column>  
            <f:facet name="header">  
                <h:outputText value="Tipo" />  
            </f:facet>  
            <h:outputText value="#{c.tipo.nome}" />  
        </p:column>  

        <p:column>  
            <f:facet name="header">  
                <h:outputText value="Descrição" />  
            </f:facet>  
            <h:outputText value="#{c.descricao}" />  
        </p:column>  

    </p:dataTable>  

    <p:spacer height="10"/>  

    <p:dataTable id="partiesTable" var="i" value="#{clientMB.parties}"  
        paginator="false" rows="5">  
        <h:column>  
            <f:facet name="header">  
                <h:outputText value="Código" />  
            </f:facet>  
            #{i.id}  
        </h:column>  
        <h:column>  
            <f:facet name="header">  
                <h:outputText value="Nome" />  
            </f:facet>  
            #{i.nome}  
        </h:column>  
        <h:column>  
            <f:facet name="header">  
                <h:outputText value="Email" />  
            </f:facet>  
            #{i.email}  
        </h:column>  
        <h:column>  
            <f:facet name="header">  
                <h:outputText value="Último acesso" />  
            </f:facet>  
            #{i.ultimoAcesso}  
        </h:column>  
        <h:column>  
            <f:facet name="header">  
                <h:outputText value="Ativo?" />  
            </f:facet>  
            #{i.ativo?'Sim':'Não'}  
        </h:column>  
        <h:column>  
            <f:facet name="header">  
                <h:outputText value="Cargo" />  
            </f:facet>  
            #{i.cargo}  
        </h:column>  
    </p:dataTable>  
  </h:form>
</body>  
</html> 

ClientMB.java:

@ViewScoped
@ManagedBean
public class ClientMB {

    /**
     * DAOS
     */
    PartDAO interDao = new PartDAO();

    /**
     * BEAN PROPERTIES
     */
    //NOVO CLIENTE
    private Client novo = new Client();

    public Client getNovo() {
        return novo;
    }
    public void setNovo(Client novo) {
        this.novo = novo;
    }

    //CLIENTE SELECIONADO
    private Client selected = new Client();

    public Client getSelected() {
        return selected;
    }
    public void setSelected(Client selected) {
        this.selected = selected;
        this.parties = partDao.list(selecionado);
    }   

    //CLIENTES
    private List<Client> clients;

    public List<Client> getClients() {
        if(clients==null){
            clients = cliDao.list();
        }
        return clients;
    }

    //INTERLOCUTORES
    private List<Part> parties;

    public List<Part> getParties() {
        parties = partDao.list(selecionado);

        return parties;
    }    

    //ACTION HANDLERS...

}

注意:客户没有,一个或多个部分。 当我将<p:datatable>更改为<h:datatable>时,一切正常。

感谢您提供任何帮助或示例代码。

1 个答案:

答案 0 :(得分:0)

<p:datatable>即时行选择似乎需要rowSelectListener属性和支持bean侦听器方法才能正常工作。

尝试在支持bean中放入一个空的侦听器方法,并将该属性添加到表中:

<p:dataTable id="clientsTable" var="c" 
             value="#{clientMB.clients}" paginator="true"  
             rows="10" selection="#{clientMB.selected}" 
             selectionMode="single"
             rowSelectListener="#{clientMB.onRowSelect}"
             onRowSelectUpdate="partiesTable">
豆中的

public void onRowSelect(SelectEvent event) {
    // do something here or not  
}