Olá galera estou desenvolvendo um pequeno sistema com JSF e HIBERNATE e queria saber,
como faço para puxar dados do banco para um selectOneMenu,
ex: tenho um campo cliente no banco de dados, e queria puxar todos eles em um selectOneMenu.
selectOneMenu puxar dados do banco
14 Respostas
Opa…
Pelo que eu entendi vc quer selecionar um campo de uma tabela puxando todos os dados desse campo, é isso?
Se for, se eu não me engano por comando de banco de dados você consegue.
SELECT FROM
Ex.: SELECT cliente FROM cadastros
Espero ter ajudado.
Senão for isso avisa ai.
Abraço
Acho que a duvida do colega é exibir o retorno do select na pagina, nesse componente que ele citou…correto?
Se sim…qual a versao do jsf voce está utilizando?
Amigo estou usando o JSF 1.2
ok…nesse caso voce deve fazer o seguinte…
<h:selectOneMenu>
<f:selectItems value="#{seubean.propriedade}" />
</h:selectOneMenu>
essa propriedade do seu bean deve retornar um List (javax.faces.model.SelectItem)
Essa classe SelectItem possui dois atributos que voce pode usar, value e label. Então voce pode preencher, pra cada um dos registros que serão exibidos no seu combo, o valor oculto e o label (valor exibido no select) correspondente…
Um exemplo simples de preenchimento desse cara:
List<Cliente> clientes = ClasseQueRetornaUmaListaDeClientes.getList();
List<SelectItem> items = new ArrayList<SelectItem>();
for (Cliente c : clientes){
SelectItem s = new SelectItem();
s.setValue(c.getIdCliente());
s.setLabel(c.getNomeCliente());
items.add(s);
//tambem há um construtor em SelectItem que recebe o value e o label
}
Blz?
alias não entendi muito bem, mais eu tenho uma entidade Cliente e tenho uma classe ClienteBean,
que tem:
public class ClienteBean {
private Cliente cliente = new Cliente();
private UIData objeto;
//gets e sets
public List<Cliente> getLista(){ //metodo para mostrar dados na tabela
Session session = HibernateUtil.getSession();
Query q = session.createQuery("from Cliente");
return q.list();
}
//metodo salvar
}
e tenho esse metodo que é uma lista de cliente para mostrar os dados do cliente na tabela e está mostrando,
mais não entendi como fazer, se puder me ajudar mais uma vez ficarei grato!!!
alias não entendi muito bem, mais eu tenho uma entidade Cliente e tenho uma classe ClienteBean,
que tem:public class ClienteBean {
private Cliente cliente = new Cliente(); private UIData objeto; //gets e sets public List<Cliente> getLista(){ //metodo para mostrar dados na tabela Session session = HibernateUtil.getSession(); Query q = session.createQuery("from Cliente"); return q.list(); } //metodo salvar}
e tenho esse metodo que é uma lista de cliente para mostrar os dados do cliente na tabela e está mostrando,
mais não entendi como fazer, se puder me ajudar mais uma vez ficarei grato!!!
entao mano tá quase lá… :lol: .Vamos lá…duas duvidas, esse seu ClienteBean é o managed bean, correto?Se sim, esse variavel do tipo UIData é o select que deve receber os dados?
No caso da primeira duvida estar correta (estou perguntando sobre o UIData, pq aí voce poderia fazer diferente, mas enfim), voce pode fazer assim:
import javax.faces.model.SelectItem
public class ClienteBean {
private List<SelectItem> items;
public ClienteBean(){
items = new ArrayList<SelectItem>();
}
public List<SelectItem> getItems(){
Session session = HibernateUtil.getSession();
Query q = session.createQuery("from Cliente");
List<Cliente> clientes = q.list();
for (Cliente c : clientes){
SelectItem s = new SelectItem();
s.setValue(c.getIdCliente());
s.setLabel(c.getNomeCliente());
items.add(s);
}
return items;
}
}
na sua pagina jsf, jsp, xhtml, ou o que for…voce coloca o seu select, puxando os dados desse managed-bean
<h:selectOneMenu>
<f:selectItems value="#{seubean.propriedade}" />
</h:selectOneMenu>
blz?
Alias, minha classe ClienteBean está assim:
private List items;
public ClienteBean(){
items = new ArrayList<SelectItem>();
}
public List<SelectItem> getItems(){
Session session = HibernateUtil.getSession();
Query q = session.createQuery("from Cliente");
List<Cliente> clientes = q.list();
for (Cliente c : clientes){
SelectItem s = new SelectItem();
s.setValue(c.getId());
s.setLabel(c.getNome());
items.add(s);
}
return items;
}
e meu jsp está assim:
<h:selectOneMenu>
<f:selectItems value="#{clienteBean.items}" />
</h:selectOneMenu>
e mesmo assim da erro!
Coloca a lista de “SelectItem” no back bean e chama ela.
O f:selectItems só recebe se for uma lista de “SelectItem”.
Coloca a lista de “SelectItem” no back bean e chama ela.O f:selectItems só recebe se for uma lista de “SelectItem”.
Sim, é isso que deve ser feito…eu devo estar explicando muito mal :lol:
Que erro ocorreu, danielll20
alias, obrigado pela paciencia comigo, mais é por que sou iniciante, e eu consegui popular o selectOneMenu com os dados do banco,
como vc me disse só que agora depois de ter listado, eu não estou conseguindo salvar esses dados como faço?
veja aqui:
meu arquivo .jsf<input jsfc="h:selectOneMenu" value="#{controllerUser.usuario.funcao}" >
<f:selectItems value="#{controllerCargo.cargos}" />
public class ControllerCargo {
private Cargo cargo;
private Map<String, Object> cargoitem=null;
private ListDataModel model;
//armazenado no select
public Map<String, Object> getCargos(){
CargoDAO cargodao = new CargoDAO();
cargoitem = new LinkedHashMap<String, Object>();
for(Iterator iter =cargodao.listaCargo().iterator();iter.hasNext();){
Cargo c = (Cargo) iter.next();
cargoitem.put(c.getFuncao(), c.getFuncao());
}
return cargoitem;
}
}
//retorna todos os cargos cadastrados
public List listaCargo(){
Query query = getSession().createQuery("from Cargo");
List<Cargo>lista = query.list();
return lista;
}
flw! espero ter ajudado
alias, obrigado pela paciencia comigo, mais é por que sou iniciante, e eu consegui popular o selectOneMenu com os dados do banco,
como vc me disse só que agora depois de ter listado, eu não estou conseguindo salvar esses dados como faço?
que bom, já podemos colocar um RESOLVIDO no titulo do tópico :lol:
agora voce quer salvar o que foi selecionado no combo, é isso?Bom basta voce associar a propriedade “value” do h:selectOneMenu com algum atributo do seu bean, ou caso seja um cadastro, criar uma classe bean que encapsule esses campos…e depois salvar o bean. Como voce está usando JPA fica fácil…
Olá pessoal!
Estou estudando hibernate e tenho uma dúvida relacionada a este tópico.
Alguem pode de dar uma dica?
Aproveitando um exemplo semelhante ao código do nosso amigo LPJava:
]
public List lista()
{
Query query = getSession()
.createQuery("select "+ String1 + ", "+ String2 +"from "+String3); // <============ minha dúvida
List<T>lista = query.list();
return lista;
}
Ternho que preencher de alguma forma String1(nome do meu id na tabela), String2 (descrição do combo) e String3(Nome da minha tabela).
Estas 2 primeiras strings representam os campos que quero inserir no meu MapItem (Map<String, Object> ).
A função acima é chamada popular o MapItem (Map<String, Object> ) :
for(Iterator iter =comboDAO.lista().iterator();iter.hasNext();){
<T> c = iter.next<T>();
MapItem.put(c.getFuncao(), c.getFuncao()); //<=================== dúvida
}
Mas como falamos de uma classe genérica, para cada T (que é uma entidade), pode existir um nome de coluna para Id e nome de
Descrição diferentes (por exemplo NOME_COLUNA_ID e NOME_COLUNA_DESCRIÇÃO).
Ou seja, esta classe generica deve receber por parametro o nome dos campos que devem ser buscados no meu objeto T.
Estes Ids e Descrições (campos que quero) seriam o que eu gostaria de passar à função
MapItem.put( String , String ), só que na forma de String. Algo semelhante a isso:
MapItem.put( c.NOME_COLUNA_ID, NOME_c.COLUNA_DESCRIÇÃO );
Mas da forma exemplificada acima não funciona. Existe uma outra forma para fazer isso?
Alguem teria uma dica?
pessoal estou com um problema parecido com esse aqui …
será que alguem pode ajudar ?