![]() |
|
||||
![]() Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Você está aqui:
JSF - Java Server Faces :::
JSF HTML Tags ::: |
Como preencher um controle <h:selectOneMenu> com informações de uma tabela do banco de dadosQuantidade de visualizações: 13082 vezes |
Em algumas ocasiões gostaríamos de preencher um controle <h:selectOneMenu> com informações de uma tabela do banco de dados. Isso é muito comum em formulários de cadastro, nos quais apresentamos uma lista de cidades ou categorias e o usuário deverá escolher uma entre as opções disponibilizadas. Para isso vamos começar criando uma tabela em um banco de dados. Aqui vou usar o MySQL, mas, você poderá usar qualquer banco, bastando alterar os parâmetros de conexão. Veja a instrução SQL CREATE TABLE que cria uma tabela chamada "categorias": DROP TABLE IF EXISTS categorias; CREATE TABLE categorias( id int(10) unsigned NOT NULL auto_increment, ...... Por simplicidade esta tabela possui apenas os campos id (auto-incremento) e nome da categoria. Vamos passar para o JavaServer Faces agora. Abra o NetBeans, Eclipse ou sua IDE favorita, crie uma nova aplicação JSF e adicione a seguinte classe de conexão: Código para Conexao.java: package banco; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Conexao{ static String url = "jdbc:mysql://localhost/estudos"; static String usuario = "root"; static String senha = "osmar1234"; static Connection conn = null; public static Connection getConexao(){ if(conn != null){ return conn; } else{ try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, usuario, senha); ...... Faça as devidas alterações nesta classe de conexão e vamos criar um bean gerenciado JSF com o nome de Categoria, que representará cada uma das categorias obtidas a partir do banco de dados. Veja o código: Código para Categoria.java: package entidades; import java.io.Serializable; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; @ManagedBean @SessionScoped public class Categoria implements Serializable { private int id; // id no banco de dados private String nome; // construtor padrão public Categoria() { } // construtor alternativo public Categoria(int id, String nome) { ...... Agora precisamos de uma classe que servirá como ponte entre a entidade Categoria e sua correspondente tabela no banco de dados. Vamos chamá-la de CategoriaDAO e vamos criá-la como um bean gerenciado JSF. Veja o código: Código para CategoriaDAO.java: package entidades; import banco.Conexao; import java.io.Serializable; import java.sql.*; import java.util.ArrayList; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; @ManagedBean @SessionScoped public class CategoriaDAO implements Serializable { public CategoriaDAO() { } // método que permite obter a lista de categorias no // banco de dados e retorná-la para exibição no controle // <h:selectOneMenu> public ArrayList<Categoria> getListaCategorias() { ArrayList<Categoria> listaCategorias = new ArrayList<Categoria>(); // obtém a conexão com o banco de dados Connection conn = Conexao.getConexao(); ...... Finalmente, eis o código para um página JSP ou Facelets contendo o controle <h:selectOneMenu> que exibirá todas as categorias 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" xmlns:f="http://java.sun.com/jsf/core"> <h:head> <title>Estudos JSF</title> </h:head> <h:body> <h4>Cadastro de Produtos</h4> <h:form> Categoria:<br /> ...... Veja que fornecemos o valor "#{produto.categoria}" para a propriedade value do controle <h:selectOneMenu>, ou seja, o valor selecionado será atribuido e recuperado de uma propriedade categoria do tipo int ou long em um bean Produto. Em seguida fornecemos o valor "#{categoriaDAO.listaCategorias}" para a propriedade value do elemento <f:selectItems>. Isso já faz com que a tag tenha acesso a todos os itens do ArrayList de categorias. Ainda neste elemento nós usamos sua propriedade var para definir o nome pelo qual os itens poderão ser referenciados. Desta forma, itemLabel receberá o nome da categoria e itemValue receberá o id. Para que o exemplo funcione corretamente, crie um bean Produto contendo id, nome e categoria (declare categoria do tipo int). Crie também um bean produtosDAO contendo um método gravar(). |
![]() |
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 |