Caros colegas, peço encarecidamente o apoio de vcs.
Alguem sabe como fazer um p:datatable atualizar outro p:datatable quando selecionado?
No caso quando um cliente é selecionado gostaria de exibir seus respectivos interlocutores.
Obs.: Não gostaria de trabalhar com FetchType.EAGER no meu EntityBean.
Segue o código:
clientes.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>
<p:dataTable id="tabela1" var="c" value="#{clienteMB.clientes}" paginator="true"
rows="10">
<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:column style="width:32px">
<p:commandButton update="tabela2"
image="ui-icon ui-icon-search" title="Visualizar cliente">
<f:ajax render="tabela2" />
<f:setPropertyActionListener value="#{c}" target="#{clienteMB.selecionado}" />
</p:commandButton>
</p:column>
</p:dataTable>
<p:spacer height="10"/>
<p:dataTable id="tabela2" var="i" value="#{clienteMB.interlocutores}"
paginator="false" rows="5" widgetVar="interlocInfo">
<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ã'}
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Cargo" />
</f:facet>
#{i.cargo}
</h:column>
</p:dataTable>
</body>
</html>
clienteMB.java (Managed Bean):
@ViewScoped
@ManagedBean
public class ClienteMB {
/**
* DAOS
*/
InterlocutorDAO interDao = new InterlocutorDAO();
/**
* BEAN PROPERTIES
*/
//NOVO CLIENTE
private Cliente novo = new Cliente();
public Cliente getNovo() {
return novo;
}
public void setNovo(Cliente novo) {
this.novo = novo;
}
//CLIENTE SELECIONADO
private Cliente selecionado = new Cliente();
public Cliente getSelecionado() {
return selecionado;
}
public void setSelecionado(Cliente selecionado) {
this.selecionado = selecionado;
this.interlocutores = interDao.list(selecionado);
}
//CLIENTES
private List<Cliente> clientes;
public List<Cliente> getClientes() {
if(clientes==null){
clientes = cliDao.list();
}
return clientes;
}
//INTERLOCUTORES
private List<Interlocutor> interlocutores;
public List<Interlocutor> getInterlocutores() {
interlocutores = interDao.list(selecionado);
return interlocutores;
}
/**
* SELECT ITENS GENERATOR
*/
//TIPOSCLIENTE
public SelectItem[] getTiposCliente() {
SelectItem[] items = new SelectItem[ClienteTipos.values().length];
int i = 0;
for(ClienteTipos t: ClienteTipos.values()) {
items[i++] = new SelectItem(t, t.getNome());
}
return items;
}
//ACTION HANDLERS...
}
Cliente.java (EntityBean Pai):
@Entity
@Table(name="clientes")
public class Cliente implements Serializable{
private static final long serialVersionUID = 1L;
public Cliente() {
super();
}
public Cliente(ClienteTipos tipo, String nome, String descricao,
List<Unidade> unidades, List<Interlocutor> interlocutores,
Vendedor vendedor, List<Servico> servicos) {
super();
this.tipo = tipo;
this.nome = nome;
this.descricao = descricao;
this.unidades = unidades;
this.interlocutores = interlocutores;
this.vendedor = vendedor;
this.servicos = servicos;
}
@Id @GeneratedValue
@Column
private long id;
@Column(name="pre_tipo")
@Enumerated(EnumType.STRING)
private ClienteTipos tipo;
@Column(name="tx_nome")
private String nome;
@Column(name="tx_descricao")
private String descricao;
/* RELACIONAMENTOS */
@OneToMany(mappedBy="empresa",fetch=FetchType.LAZY)
private List<Interlocutor> interlocutores;
//Gets & Sets
}
Interlocutor.java (EntityBean filha):
@Entity
@Table(name="interlocutores")
public class Interlocutor extends Usuario implements Serializable, TelefoneSuport {
public Interlocutor() {
super();
tipo = UsuarioTipo.INTERLOCUTOR;
}
private static final long serialVersionUID = 1L;
//Ids
//Atributos
@Column(name="tx_cargo")
private String cargo;
//Relacionamentos
@ManyToOne
@JoinColumn(name="id_cliente",referencedColumnName="id")
private Cliente empresa;
//Gets & Sets
}
Desde já agradeço de coração por qualquer ajuda,
Um grande abraço,