Na postagem de hoje iremos fazer um SelectOneMenu ou como a maioria conhece ComboBox em JSF 1.2, numa mesma página teremos um dinâmico onde a lista vem de um bean e um estático onde os itens são definidos diretamente no código fonte da página. Segue a imagem:
import java.util.ArrayList; import java.util.List; import javax.faces.model.SelectItem; public class ClienteBean { private List< SelectItem > selectItemsClientes; private int codigoClienteSelecionado; public List< SelectItem > getSelectItemsClientes() { selectItemsClientes = new ArrayList< SelectItem >(); selectItemsClientes.add(new SelectItem(1, "Andii")); selectItemsClientes.add(new SelectItem(2, "João")); selectItemsClientes.add(new SelectItem(3, "Maria")); return selectItemsClientes; } public void setSelectItemsClientes(List< SelectItem > selectItemsClientes) { this.selectItemsClientes = selectItemsClientes; } public int getCodigoClienteSelecionado() { return codigoClienteSelecionado; } public void setCodigoClienteSelecionado(int codigoClienteSelecionado) { this.codigoClienteSelecionado = codigoClienteSelecionado; } }
Nesse bean, temos um int que corresponde ao valor selecionado no combo, e uma lista de SelectItem (veja que o SelectItem pertence ao pacote javax.faces, sendo do próprio JSF) com valores que eu setei diretamente no bean(claro que poderiam ser valores do banco), aí vem a pergunta: mas essa lista não poderia ser de objetos mesmo, tipo List< Cliente >? A resposta é sim! Poderia ser uma lista com o objeto Cliente mesmo, porém, iria dar um trabalho muito grande para pegar esse valor, tendo que criar converter e ainda podendo enfrentar problemas de conversão! Para entender melhor, leia isso!
OBS: Lembre-se de mapear o ClienteBean no faces-config.xml, nesse exemplo usei o escopo session mesmo.
Agora segue o código fonte da página jsp que tem os comboBox:
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <html> <f:view> <head> <title>Clientes</title> </head> <body> <h:panelGrid columns="1"> <h:outputText value="SelectOneMenu com lista dinâmica" /> <h:selectOneMenu value="#{clienteBean.codigoClienteSelecionado}"> <f:selectItems value="#{clienteBean.selectItemsClientes}" /> </h:selectOneMenu> <h:outputText value="SelectOneMenu com lista estática" /> <h:selectOneMenu value="#{clienteBean.codigoClienteSelecionado}"> <f:selectItem itemValue="1" itemLabel="Andii"/> <f:selectItem itemValue="2" itemLabel="João"/> <f:selectItem itemValue="3" itemLabel="Maria"/> </h:selectOneMenu> </h:panelGrid> </body> </f:view> </html>
Bom, para criar selectOneMenu dinâmico, usa-se o selectItems tendo como value a lista. Já para os casos estáticos, usa-se o selectItem setando o itemValue para o codigo do cliente(exemplo) e o itemLabel para o deverá aparecer na lista(exemplo: nome do cliente).
Aconselho dar uma olhada no link, tem vários outros componentes interessantes e úteis: Mais componentes em JSF
Gostei! show...
ResponderExcluirDa pra dar um exemplo de um combo dinâmico chamar e preencher outro dinâmico!
Olá Hermes! Talvez o Ajax Nativo do JSF 2.0 possa te ajudar, veja esse aqui: http://javasemcafe.blogspot.com/2011/03/jsf-20-ajax-nativo.html, acredito que o segundo componente seja o que vc procura!
ResponderExcluirA parte no hibernate, alguem poderia me ajudar, segui esse exemplo mais não sei como fica para trazer os dados. Obrigado!
ResponderExcluir