Primefaces 2.2.1, кажется, не принимают две таблицы на одной странице - PullRequest
2 голосов
/ 20 июня 2011

Я призываю вас поддержать, ребята.

Я использую JSF 2.0. Primefaces и 2.2.1.

Мне нужно обновить <p:datatable>, когда выбрана строка на другом <p:datatable>. Оба на одной странице.

Когда выбран Заказчик, он хотел бы отобразить свои соответствующие Стороны.

Примечание: не хочу работать с FetchType.EAGER в моем EntityBean.

Ниже приведен код:

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...

}

Примечание: A Клиент не имеет ни одного, одного или нескольких Part ies. Когда я меняю <p:datatable> на <h:datatable> все работает нормально.

Спасибо за любую помощь или пример кода.

1 Ответ

0 голосов
/ 20 июня 2011

Похоже, что <p:datatable> для мгновенного выбора строки требуется атрибут rowSelectListener и метод слушающего бина, чтобы работать правильно.

Попробуйте добавить пустой метод слушателя в компонент 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  
}  
...