Amigos, estou tentando exibir um data table em uma página xhtml. É bem simples: o data table chama um procedimento "getSiscomexImportacaoAlterar()" de meu managed bean (solicitacaoMB), e este, por sua vez, devolve uma arraylist de Solicitacao (meu bean), que é a lista que será exibida na tabela. Não sei por que CATSO, quando mando rodar a página, entra em um loop infinito e eu sou obrigado a reiniciar o NetBeans. Quando vou depurar o código, observo que o método criarMsgDecexSiscomexImportacao roda direitinho e devolve a arrayList. Mas depois, ao invés de carregar a página, o método getSiscomexImportacaoAlterar() é acionado de novo e de novo e de novo e a página não carrega nunca. Era como se ele tentasse carregar a página de novo para devolver o resultado, e, conseqüentemente rodasse o método de novo e entrasse assim em um loop eterno. Se alguém tiver uma luz aí, agradeço!
Segue meu form_texto_msg.xhtml:
<h:panelGrid columns="1" rendered="#{solicitacaoMB.siscomexImportacaoAlterar != null}" > <!-- só renderiza este bloco caso o procedimento do MB não retorne null -->
<h:outputText value="b)Alterar:" style="font-size: 12px" />
<h:dataTable id="dt1" value="#{solicitacaoMB.siscomexImportacaoAlterar}" var="item" >
<h:column headerClass="headerColuna" >
<f:facet name="header" >
Nome
</f:facet>
<h:outputText value="#{item.nomeUsuario}" styleClass="coluna" />
</h:column>
<h:column headerClass="headerColuna2">
<f:facet name="header" >
CPF
</f:facet>
<h:outputText value="#{item.cpfUsuario}" styleClass="coluna2" />
</h:column>
<h:column headerClass="headerColuna3">
<f:facet name="header" >
Perfil
</f:facet>
<h:outputText value="#{item.perfilSiscomexImportacao}" styleClass="coluna2" />
</h:column>
<h:column headerClass="headerColuna4">
<f:facet name="header" >
Gecex
</f:facet>
<h:outputText value="#{item.dependenciaUsuario} - #{item.nomeDependenciaUsuario}" styleClass="coluna2" />
</h:column>
<h:column headerClass="headerColuna2">
<f:facet name="header" >
CNPJ da Gecex
</f:facet>
<h:outputText value="#{item.cnpjDependenciaUsuario}" styleClass="coluna2" />
</h:column>
</h:dataTable>
</h:panelGrid>
Este é o SolicitacaoMB:
public List<Solicitacao>getSiscomexImportacaoAlterar(){
SolicitacaoDAO solicitacaoDAO1 = new SolicitacaoDAO();
return solicitacaoDAO1.criarMsgDecexSiscomexImportacao(2);
}
E este é o SolicitacaoDAO (que imagino ser o cgrande cagão da história):
public List<Solicitacao> criarMsgDecexSiscomexImportacao(int naturezaId){
String sql = "";
sql = "SELECT a.nome AS `nome`, s.matricula_usuario AS `matricula_usuario`, a.CPF AS `cpf`, " +
"p.perfil AS `perfil`, a.Prefixo AS `prefixo_gecex`, m.`Dependencia` AS nome_gecex, " +
"m.CNPJ AS cnpj " +
"FROM site_sca.solicitacao s " +
"INNER JOIN site_sca.perfil_siscomex_importacao p " +
"ON p.id=s.perfil_siscomex_importacao_id " +
"INNER JOIN arh.arh_dados a " +
"ON a.Matricula=s.matricula_usuario " +
"INNER JOIN mestre.mestre m " +
"ON a.Prefixo=m.Prefixo " +
"WHERE s.status_id=3 AND s.perfil_siscomex_importacao_id=1 AND s.natureza_id<>1 " +
"ORDER BY a.nome";
Connection con = ConexaoDAO.getConnection();
PreparedStatement pstm = null;
ResultSet rs = null;
Solicitacao solicitacao1 = new Solicitacao();
ArrayList resultado1 = new ArrayList();
ArrayList resultado2 = new ArrayList();
try{
pstm = con.prepareStatement(sql);
if(naturezaId !=3)
pstm.setInt(1, naturezaId);
rs = pstm.executeQuery();
while(rs.next()){
solicitacao1 = new Solicitacao();
solicitacao1.setNomeUsuario(rs.getString("nome"));
solicitacao1.setMatriculaUsuario(rs.getString("matricula_usuario"));
solicitacao1.setCpfUsuario(formataCpf(rs.getString("cpf")));
solicitacao1.setPerfilSiscomexImportacao(rs.getString("perfil"));
solicitacao1.setDependenciaUsuario(rs.getInt("prefixo_gecex"));
solicitacao1.setNomeDependenciaUsuario(rs.getString("nome_gecex"));
solicitacao1.setCnpjDependenciaUsuario(formataCnpj(rs.getString("cnpj")));
resultado1.add(solicitacao1);
}
} catch (Exception e) {
logger.error("Não consegui consultar o banco (" + e.getStackTrace() + ").");
} finally{
ConexaoDAO.closeConnection(con, null, rs, pstm);
}
if(resultado1.isEmpty())
return null;
else{
//Descobre o perfil siscomex importação anterior (constante na tabela usuario)
Iterator<Solicitacao> iterator = resultado1.iterator();
try{
while(iterator.hasNext()){
sql = "SELECT p.perfil AS `perfil` " +
"FROM site_sca.usuario u " +
"INNER JOIN site_sca.perfil_siscomex_importacao p " +
"ON p.id=u.perfil_siscomex_importacao_id " +
"WHERE matricula=?";
con = ConexaoDAO.getConnection();
pstm = con.prepareStatement(sql);
solicitacao1 = iterator.next();
pstm.setString(1, solicitacao1.getMatriculaUsuario());
rs = pstm.executeQuery();
if (rs.first()){
rs.next();
solicitacao1.setPerfilSiscomexImportacaoAnterior(rs.getString("perfil"));
} else
solicitacao1.setPerfilSiscomexImportacaoAnterior("sem acesso");
resultado2.add(solicitacao1);
}
} catch (Exception e) {
logger.error("Não consegui consultar o banco (" + e.getStackTrace() + ").");
} finally{
ConexaoDAO.closeConnection(con, null, rs, pstm);
}
return resultado2;
}
}
Desde já agradeço pela paciência!