Você está aqui:
JSF - Java Server Faces :::
JSF HTML Tags ::: |
Como retornar os registros de uma tabela do banco de dados e fornecê-los para exibição em um controle <h:dataTable> como um objeto da interface ResultSetQuantidade de visualizações: 8757 vezes |
A propriedade value do controle <h:dataTable> nos permite definir a fonte dos dados a serem exibidos na tabela HTML gerada por esta tag. Entre as fontes de dados aceitáveis está um objeto da interface java.sql.ResultSet. Isso quer dizer que podemos disparar um comando SQL SELECT em uma tabela do banco de dados e já passar os dados diretamente para o <h:dataTable>, sem a necessidade de usarmos classes de entidades adicionais ou listas intermediárias. Para ver como isso é feito, considere um bean gerenciado JSF que faz uma conexão com o banco de dados e obtém os registros de uma tabela chamada contatos: Código para Agenda.java: package arquivo; import java.sql.*; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.sql.rowset.CachedRowSet; @ManagedBean @SessionScoped public class Agenda { public Agenda() { } // método que permite obter a lista de contatos public ResultSet getListaContatos() { // lista que guardará os contatos CachedRowSet crs = null; // obtém a conexão com o banco de dados Connection conn = Conexao.getConexao(); try { Statement stmt = conn.createStatement(); String query = "SELECT * FROM contatos ORDER BY nome"; ResultSet rs = stmt.executeQuery(query); crs = new com.sun.rowset.CachedRowSetImpl(); crs.populate(rs); } catch (SQLException ex){ // talvez um log aqui } return crs; } } Veja que, embora a assinatura do método getListaContatos() mostre que o retorno é um objeto da interface java.sql.ResultSet, no corpo do método nós estamos retornando um objeto da classe com.sun.rowset.CachedRowSetImpl, uma implementação concreta da interface javax.sql.rowset.CachedRowSet. Isso é feito porque, para retornarmos apenas um ResultSet, a conexão com o banco de dados deveria permanecer aberta, ao passo que uma implementação da interface javax.sql.rowset.CachedRowSet é um conjunto de dados "desconectado". Veja agora o código para a página JSP ou Facelets que contém o controle <h:dataTable> que exibirá os registros da tabela do banco de dados: Código para index.xhtml: <?xml version='1.0' encoding='UTF-8' ?> <!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"> <h:head> <title>Estudos JavaServer Faces</title> </h:head> <h:body> <h:form> <h:dataTable border="1" value="#{agenda.listaContatos}" var="contato"> <h:column>#{contato.id}</h:column> <h:column>#{contato.nome}</h:column> <h:column>#{contato.telefone}</h:column> <h:column>#{contato.email}</h:column> </h:dataTable> </h:form> </h:body> </html> A classe Agenda obtém a conexão com a base de dados por meio da linha: // obtém a conexão com o banco de dados Connection conn = Conexao.getConexao(); Em outras dicas desta seção eu mostro como esta classe de conexão pode ser escrita. |
![]() |
Veja mais Dicas e truques de JSF - Java Server Faces |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |