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.
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!!!
[quote=danielll20]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!!![/quote]
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”.
[quote=walacy]Coloca a lista de “SelectItem” no back bean e chama ela.
O f:selectItems só recebe se for uma lista de “SelectItem”.[/quote]
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}" />
controller:
[code]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;
}
}
[/code]
classe cargodao
[code]//retorna todos os cargos cadastrados
public List listaCargo(){
Query query = getSession().createQuery(“from Cargo”);
Listlista = query.list();
return lista;
}[/code]
flw! espero ter ajudado
[quote=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?[/quote]
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 ?