2
I have two tables in different tabs and when clicking on each one, the table must be filled. I am using the same list to fill the two tables, what changes is the SQL for query that varies according to the tab clicked. But the tables are not being filled in at all, the two tables appear empty.
Tabview
<p:tabView>
<p:ajax event="tabChange" listener="#{artsAptasLivroOrdemController.onTabChange}" update="@([id$=blocoListagemArts])"/>
<p:tab title="ARTs que não possuem Livro de Ordem">
<p:outputPanel id="blocoListagemArtsComLivro">
<p:dataTable value="#{artsAptasLivroOrdemController.artsAptas}"
id="tableArtsSemLivroOrdem"
rowKey="#{item.numeroArt}" var="item"
emptyMessage="Você não possui ARTs sem Livro de Ordem"
paginator="true" rows="20">
<f:facet name="header">
ARTs de Obras/Serviços sem Livro de Ordem
</f:facet>
<p:column headerText="Numero da ART" sortBy="#{item.numeroArt}">
<h:outputText value="#{item.numeroArt}" />
</p:column>
<p:column headerText="Tipo de ART" sortBy="#{item.tipoArt.descricao}">
<h:outputText value="#{item.tipoArt.descricao}" />
</p:column>
<p:column headerText="Data de Elaboração" sortBy="#{item.dataElaboracao}">
<h:outputText value="#{item.dataElaboracao}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</p:column>
<p:column headerText="Proprietário" sortBy="#{item.nomeProprietario}">
<h:outputText value="#{item.nomeProprietario}" />
</p:column>
<p:column headerText="Livro de Ordem">
<p:commandLink id="criarLivroOrdemButton"
immediate="true"
rendered="#{artsAptasLivroOrdemController.renderizarBotaoCriarLivro(item.numeroArt)}"
onclick="dialogLivroOrdem.show();"
update="#{artsAptasLivroOrdemController.componentes}">
<f:setPropertyActionListener value="#{item}" target="#{artsAptasLivroOrdemController.artApta}"/>
<p:graphicImage alt="Criar/Ver" value="../imagens/site/adicionar.png" />
</p:commandLink>
<p:commandLink immediate="true"
update="#{artsAptasLivroOrdemController.componentes}"
rendered="#{artsAptasLivroOrdemController.renderizarBotaoVerLivro(item.numeroArt)}"
onclick="javascript:window.location='livroOrdem.jsf?a=#{item.numeroArt}'; return false;">
<p:graphicImage alt="Ver Livro de Ordem" value="../imagens/site/detail.png" />
</p:commandLink>
</p:column>
</p:dataTable>
</p:outputPanel>
</p:tab>
<p:tab title="ARTs que possuem Livro de Ordem">
<p:outputPanel id="blocoListagemArtsSemLivro">
<p:dataTable value="#{artsAptasLivroOrdemController.artsAptas}"
id="tableArtsComLivroOrdem"
rowKey="#{item.numeroArt}" var="item"
emptyMessage="Você não possui ARTs com Livro de Ordem"
paginator="true" rows="20">
<f:facet name="header">
ARTs de Obras/Serviços com Livro de Ordem
</f:facet>
<p:column headerText="Numero da ART" sortBy="#{item.numeroArt}">
<h:outputText value="#{item.numeroArt}" />
</p:column>
<p:column headerText="Tipo de ART" sortBy="#{item.tipoArt.descricao}">
<h:outputText value="#{item.tipoArt.descricao}" />
</p:column>
<p:column headerText="Data de Elaboração" sortBy="#{item.dataElaboracao}">
<h:outputText value="#{item.dataElaboracao}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</p:column>
<p:column headerText="Proprietário" sortBy="#{item.nomeProprietario}">
<h:outputText value="#{item.nomeProprietario}" />
</p:column>
<p:column headerText="Livro de Ordem">
<p:commandLink id="criarLivroOrdemButton"
immediate="true"
rendered="#{artsAptasLivroOrdemController.renderizarBotaoCriarLivro(item.numeroArt)}"
onclick="dialogLivroOrdem.show();"
update="#{artsAptasLivroOrdemController.componentes}">
<f:setPropertyActionListener value="#{item}" target="#{artsAptasLivroOrdemController.artApta}"/>
<p:graphicImage alt="Criar/Ver" value="../imagens/site/adicionar.png" />
</p:commandLink>
<p:commandLink immediate="true"
update="#{artsAptasLivroOrdemController.componentes}"
rendered="#{artsAptasLivroOrdemController.renderizarBotaoVerLivro(item.numeroArt)}"
onclick="javascript:window.location='livroOrdem.jsf?a=#{item.numeroArt}'; return false;">
<p:graphicImage alt="Ver Livro de Ordem" value="../imagens/site/detail.png" />
</p:commandLink>
</p:column>
</p:dataTable>
</p:outputPanel>
</p:tab>
</p:tabView>
onTabChange
public void onTabChange(TabChangeEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
ELResolver resolver = context.getApplication().getELResolver();
LoginControllerOnline controller = new LoginControllerOnline();
controller = (LoginControllerOnline) resolver.getValue(context.getELContext(), null, "loginControllerOnline");
pessoa = controller.getPessoa();
String query = "";
artsAptas.clear();
if(pessoa instanceof Profissional) {
Profissional profissional = (Profissional) pessoa;
if(event.getTab().getTitle().equals("ARTs que não possuem Livro de Ordem")) {
query = "SELECT a.numeroart, a.dataElaboracao, a.nomeProprietario, a.cepobraservico, a.tipologradouroobraservico, "
+ "a.logradouroobraservico, a.numeroobraservico, a.bairroobraservico, a.cidadeobraservico, a.ufobraservico, a.datainicioobraservico, "
+ "t.idTipoArt, t.descricao AS tipoArt, sa.descricao AS descricao "
+ "FROM Art a "
+ "LEFT JOIN pessoa p ON p.codigo = a.codigoprofissionalcontratado "
+ "LEFT JOIN TipoArt t ON t.idTipoArt = a.tipoArt_idTipoArt "
+ "LEFT JOIN HistoricoSituacaoArt hsa ON hsa.art_numeroart = a.numeroArt "
+ "LEFT JOIN SituacaoArt sa ON sa.idSituacaoArt = hsa.idSituacaoArt "
+ "LEFT JOIN LivroOrdem lo ON lo.art_numeroArt = a.numeroArt "
+ "WHERE (a.codigoprofissionalcontratado = :codigo) AND (t.descricao = 'ART de Obra ou Serviço') "
+ "AND (hsa.dataEfetivacao IN (SELECT MAX(dataEfetivacao) FROM HistoricoSituacaoArt hsa WHERE hsa.art_numeroArt = a.numeroArt)) "
+ "AND (lo.art_numeroArt IS NOT NULL) ";
if(!nomeProprietarioPesquisa.isEmpty()) {
query += "AND (LOWER(a.nomeProprietario) LIKE LOWER(:nomeProprietarioPesquisa))";
params.put("nomeProprietarioPesquisa", nomeProprietarioPesquisa);
}
else if(!numeroArtPesquisa.isEmpty()) {
query += "AND (a.numeroArt = :numeroArtPesquisa)";
params.put("numeroArtPesquisa", numeroArtPesquisa);
}
else if(!numeroArtPesquisa.isEmpty() && !nomeProprietarioPesquisa.isEmpty()) {
query += "AND (a.numeroArt = :numeroArtPesquisa) AND (a.nomeProprietario = :nomeProprietarioPesquisa)";
params.put("numeroArtPesquisa", numeroArtPesquisa);
params.put("nomeProprietarioPesquisa", nomeProprietarioPesquisa);
}
params.put("codigo", profissional.getCodigo());
System.out.println(event.getTab().getTitle());
}
else if(event.getTab().getTitle().equals("ARTs que possuem Livro de Ordem")) {
query = "SELECT a.numeroart, a.dataElaboracao, a.nomeProprietario, a.cepobraservico, a.tipologradouroobraservico, "
+ "a.logradouroobraservico, a.numeroobraservico, a.bairroobraservico, a.cidadeobraservico, a.ufobraservico, a.datainicioobraservico, "
+ "t.idTipoArt, t.descricao AS tipoArt, sa.descricao AS descricao "
+ "FROM Art a "
+ "LEFT JOIN pessoa p ON p.codigo = a.codigoprofissionalcontratado "
+ "LEFT JOIN TipoArt t ON t.idTipoArt = a.tipoArt_idTipoArt "
+ "LEFT JOIN HistoricoSituacaoArt hsa ON hsa.art_numeroart = a.numeroArt "
+ "LEFT JOIN SituacaoArt sa ON sa.idSituacaoArt = hsa.idSituacaoArt "
+ "LEFT JOIN LivroOrdem lo ON lo.art_numeroArt = a.numeroArt "
+ "WHERE (a.codigoprofissionalcontratado = :codigo) AND (t.descricao = 'ART de Obra ou Serviço') "
+ "AND (hsa.dataEfetivacao IN (SELECT MAX(dataEfetivacao) FROM HistoricoSituacaoArt hsa WHERE hsa.art_numeroArt = a.numeroArt)) "
+ "AND (sa.descricao = 'Registrada') AND (lo.art_numeroArt IS NULL) ";
if(!nomeProprietarioPesquisa.isEmpty()) {
query += "AND (LOWER(a.nomeProprietario) LIKE LOWER(:nomeProprietarioPesquisa))";
params.put("nomeProprietarioPesquisa", nomeProprietarioPesquisa);
}
else if(!numeroArtPesquisa.isEmpty()) {
query += "AND (a.numeroArt = :numeroArtPesquisa)";
params.put("numeroArtPesquisa", numeroArtPesquisa);
}
else if(!numeroArtPesquisa.isEmpty() && !nomeProprietarioPesquisa.isEmpty()) {
query += "AND (a.numeroArt = :numeroArtPesquisa) AND (a.nomeProprietario = :nomeProprietarioPesquisa)";
params.put("numeroArtPesquisa", numeroArtPesquisa);
params.put("nomeProprietarioPesquisa", nomeProprietarioPesquisa);
}
params.put("codigo", profissional.getCodigo());
System.out.println(event.getTab().getTitle());
}
}
List<Object[]> arts = objectDao.listPesqQuery(query, params);
for (Object[] o : arts) {
Art artTemp = new Art();
artTemp.setNumeroArt((String) o[0]);
artTemp.setDataElaboracao((Date) o[1]);
artTemp.setNomeProprietario((String) o[2]);
artTemp.getEnderecoObraServico().setCep((String) o[3]);
artTemp.getEnderecoObraServico().setTipoLogradouro((String) o[4]);
artTemp.getEnderecoObraServico().setLogradouro((String) o[5]);
artTemp.getEnderecoObraServico().setNumero((String) o[6]);
artTemp.getEnderecoObraServico().setBairro((String) o[7]);
artTemp.getEnderecoObraServico().setCidade((String) o[8]);
artTemp.getEnderecoObraServico().setUf((String) o[9]);
artTemp.setDataInicioObraServico((Date) o[10]);
artTemp.setTipoArt(new TipoArt());
BigInteger idTipoArt = (BigInteger) o[11];
if (idTipoArt != null) {
artTemp.getTipoArt().setIdTipoArt(idTipoArt.longValue());
}
artTemp.getTipoArt().setDescricao((String) o[12]);
artsAptas.add(artTemp);
}
}