ComboBox com jsf

preciso de ahuda para popular meu selectOneMenu achei um codigo que faz assim:mas ta meio estranho nao consegui entender



 public ArrayList<SelectItem> getComboCliente()  
	     {  
		 
			Session session = ConSys.getSessionFactory().openSession();
			List<Cliente> list = session.createQuery("from Cliente").list();	        
	         ArrayList<SelectItem> cli = new ArrayList();
	         for(Iterator iter = list.iterator(); iter.hasNext();){ 	        
	             cli.add( new SelectItem( 1,"hhhh"));  //tem que pegar o codigo e o nome do cliente 
	      //  return cli;  ta errado
	     }  
	     }

Alguem pode ajudar?
bjos.

sera q alguem poderia me ensinar como fazer uma combobox?

Olá,

comboBox em jsf é preenchida com objetos do tipo SelectItem. Então no seu jsp o campo value deve ser uma expressão para uma lista de selectItem.

O selectItem recebe no construtor 2 parametros, o primeiro deles é o value, que é o valor que será submetido, e o segundo é o texto que será exibido como opção na combo.

nesse código aí, quem fez está usando o hibernate pra pegar uma lista de entidades, e então percorrendo essa lista pra gerar SelectItems.

Só um toque, consultar o banco de dados nos getters não é uma boa em JSF, pois em uma requisição o método getter pode ser chamado várias vezes. seria melhor fazer a consulta no construtor do Bean.

espero ter ajudado.

[]s
Ferry

Mas alguem tem um exemplo que de p/ mim analisar ?

Estou há dias com problemas em utilizar selectOneMenu alinhados, Pais e Estado onde para carregar estado depende do pais, eu consegui preenche os Paises e estou utilizando Ajax4Jsf para carregar o segundo, porém, neste momento estou com o problema de não conseguir obter o valor selecionado no Pais.

Tentei de diversas maneiras, postei várias vezes aqui no GUJ mas não consegui ajuda de ninguém, espero conseguir agora.
Veja o backingbean/managebean resumido:

public class ClubesMb implements Serializable{
	...
	private Integer paisSelecionado = 0; // 
	...

	public SelectItem[] getAllCountrys(){
		return (region.getPaises());
	}

	public Integer getPaisSelecionado() {
		return paisSelecionado;
	}

	public void setPaisSelecionado(Integer paisSelecionado) {
		this.paisSelecionado = paisSelecionado;
	}

	
	public String actChangeCountry(){
		System.out.println("Pais Selecionado 2: " + this.paisSelecionado );
		System.out.println("--");
		return Util.SUCCESS;
	}
}

O JSP

<a4j:outputPanel>
	<h:outputLabel value="Selecionado: "/>&nbsp;<h:outputText value="#{clubesMb.paisSelecionado}"/>
</a4j:outputPanel>
<hr/>
	<h:panelGrid columns="2" cellpadding="2" cellspacing="1" styleClass="main">

		<!-- campos ocultados -->
		
		<h:outputText value="Pais"/>
		<h:selectOneMenu id="pais"
						 rendered="true"
						 immediate="true"
						 value="#{clubesMb.paisSelecionado}">

			<f:selectItems value="#{clubesMb.allCountrys}"/>
			<a4j:support event="onchange" 
						 action="#{clubesMb.actChangeCountry}"
						 immediate="true"
						 reRender="estado"/>
		</h:selectOneMenu>

		<h:outputText value="Estado"/>
		<h:selectOneMenu id="estado" 
						 value="#{clubesMb.clube.estado.id_estado}"
						 rendered="true">
			<f:selectItems value="#{clubesMb.estados}"/>
		</h:selectOneMenu>

	</h:panelGrid>	
</a4j:form>

Quando o valor é modificado no dropdown pais o valor do atributo clubesMb.paisSelecionado não é modificado, quero dizer, não é recarregado , com isto, o valor sempre é zero e não é possível carregar os estados daquele país.

Será que pode ser algum erro no configuração no faces-config.xml?!??

 <managed-bean>
  <managed-bean-name>clubesMb</managed-bean-name>
  <managed-bean-class>com.clubs.control.ClubesMb</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>

Agradeço pela atenção.

Consegui resolver, não fiz nada de mais apenas modifiquei um pouco os atributos da tag <h:selectOneMenu/> tirei o immediate=true e usei o ajaxSingle=true e, para rederinzar fiz reRender=“pais,estado”. Pronto funcionou!

Abraços.

[quote=lusilva1982]Consegui resolver, não fiz nada de mais apenas modifiquei um pouco os atributos da tag <h:selectOneMenu/> tirei o immediate=true e usei o ajaxSingle=true e, para rederinzar fiz reRender=“pais,estado”. Pronto funcionou!

Abraços.[/quote]

Estou passando pelo mesmo problema, como ficou seu DAO?