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