Olá pessoal, estou começando agora a estudar JSF, vi alguns vídeos no Youtube e agora com o que deu para aprender estou tentando criar uma aplicação de teste apenas para ver se consigo com o JSF fazer algumas interações básicas com o MySQL.
Consigo cadastrar e alterar. Tentei localizar, mas não sei como trazer o resultado para a página xhtml, então pulei para listar todos os registros da minha tabela, onde nesta há 3 registros, sendo que somente retorna no meu xhtml o terceiro registro repetido 3 vezes e não entendo o porque disso, já fiz o método várias vezes, inclusive copiei um método que está funcionando em uma aplicação JSP e apenas fiz algumas alterações para esse pequeno teste JSF, e nada também, sempre o mesmo problema.
Resolvi colocar um System.out.prinln() para ver o que meu resultado estava retornando e para minha surpresa ele retornou meus registros repetindo eles 3 vezes. Segue a cópia da resposta no Console do Eclipse:
ID: 1 - Campo: Anderson
ID: 2 - Campo: Janaina
ID: 3 - Campo: Ola
ID: 1 - Campo: Anderson
ID: 2 - Campo: Janaina
ID: 3 - Campo: Ola
ID: 1 - Campo: Anderson
ID: 2 - Campo: Janaina
ID: 3 - Campo: Ola
Realmente não entendi.
Vou postar meu método para listar os registros:
public List<Tabela> getTabelas() {
Conecta conecta = new Conecta();
Connection conexao = conecta.abreConexao();
List<Tabela> lista = new ArrayList<Tabela>();
Statement consulta = null;
ResultSet resultado = null;
//Tabela tabela = null;
String sql = "SELECT * FROM tabela";
try {
consulta = conexao.createStatement();
resultado = consulta.executeQuery(sql);
while (resultado.next()) {
//tabela = new Tabela();
tabela.setId(resultado.getInt("id"));
tabela.setCampo(resultado.getString("campo"));
System.out.println("ID: " + resultado.getInt("id") + " - Campo: " + resultado.getString("campo"));
lista.add(tabela);
}
} catch (SQLException e) {
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
"Erro ao localizar registro. Mensagem: " + e.getMessage(), ""));
} finally {
try {
consulta.close();
resultado.close();
conexao.close();
} catch (Throwable e) {
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
"Erro ao fechar operação de Localização. Mensagem: " + e.getMessage(), ""));
}
}
return lista;
} //fim listar
Agora vou postar minha página xhtml onde mostra o terceiro registro repetindo 3 vezes:
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:dataTable value="#{tabelaBean.tabelas2}" var="tab" border="1">
<h:column>
<h:outputText value="#{tab.id}"/>
</h:column>
<h:column>
<h:outputText value="#{tab.campo}"/>
</h:column>
</h:dataTable>
<h:messages/>
<h:outputLink value="index.jsf"><h:outputText value="Voltar"/></h:outputLink>
</html>
Por favor, alguém poderia me ajudar?
Fiquei o dia todo tentando arrumar isso sem sucesso.
Desde já fico grato.