我敦促你们的支持。
我使用的是JSF 2.0。底漆面和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...
}
注意:客户端没有、有一个或多个部件。当我用<h:datatable>
更改<p:datatable>
时,一切正常。
感谢您提供的任何帮助或示例代码。
似乎<p:datatable>
即时行选择需要rowSelectListener
属性和backingbean监听器方法才能正常工作。
尝试在backingbean中放入一个空的listener方法,并将属性添加到表中:
<p:dataTable id="clientsTable" var="c"
value="#{clientMB.clients}" paginator="true"
rows="10" selection="#{clientMB.selected}"
selectionMode="single"
rowSelectListener="#{clientMB.onRowSelect}"
onRowSelectUpdate="partiesTable">
在bean中:
public void onRowSelect(SelectEvent event) {
// do something here or not
}