Duvida: Objeto no combobox

5 respostas
N

Bom, eu estou fazendo uma aplicacao web com JSF e Hibernate.
Minha duvida eh a seguinte: Tem como armazenar um objeto para cada item do combobox?

eu tenho um metodo que retorna uma collection para popular meu combobox, soh q, como podem ver no codigo abaixo, eu estou usando o id do meu objeto como valor para o combobox. A parte triste disso eh q eu vou ter que buscar no banco o objeto que foi selecionado no combo. Isso me parece um tanto quanto, como eu vou dizer, gambiarra!

teria como eu jogar no value do item o meu objeto? como ficaria o codigo?

No meu bean:

public Collection getFilmes() { Collection c= new ArrayList(); for (Copia c : copia.getCopiasDisponiveis()) { c.add(new SelectItem(c.getId(), c.toString())); } return c; }

Tentei atribuir o objeto no selectitem, mas da erro de conversao:

public Collection getFilmes() { Collection c= new ArrayList(); for (Copia c : copia.getCopiasDisponiveis()) { c.add(new SelectItem(c, c.toString())); } return c; }

Na pagina jsp:

<h:selectOneMenu id="copia" value="#{MeuBean.teste}"> <f:selectItems value="#{MeuBean.filmes}" /> </h:selectOneMenu>

se alguem puder ajudar, vlw

5 Respostas

thiagocg

em minhas aplicações jsf sempre utilizei do jeito que vc mencionou, passo o id e o valor q sera exibido no combo, realmente seria mais util se pudessemos utilizar o objeto diretamente no combo, assim como é possivel fazer em swing! Talves seja e a gente não saiba…rsrsrs

Uma alternativa seria vc criar um map onde guardaria esses seus objetos usando como chave o id do objeto, e pegando direto da sessão, mas como todos sabem ficar carregando coleções na sessão não é a melhor das opções!

[ ]'s

N

Entendo, bom valeu pela ideia, vou ver se consigo bolar algo leve pra armazenar a colecao de objetos

vlw, thiago

mas se alguem souber se tem como jogar objeto no combo, nao deixe de postar

vlw

DirceuSobrinho

Você pode passar o objeto, no entanto vc tera que implementar um conversor.

Exemplo de um conversor

<h:selectOneMenu id="copia" value="#{MeuBean.filme}" converter="filmeConverter">  
     <f:selectItems value="#{MeuBean.filmes}" />  
</h:selectOneMenu>

classe que implementa javax.faces.convert.Converter

public class FilmeConverter implements Converter{

	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
		//implementação
	}

	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
		//implementação
	}
	
}

e declarar o FilmeConveter no faces-config.xml

thiagocg

Ok, concordo que facilitaria a vida não ter q buscar no banco, mas se fizer a carga dos objetos direto na pagina ñ estará carregando um monte de coisa desnecessaria, apenas tornado a carga da pag. mais lenta?

N

DirceuSobrinho:
Você pode passar o objeto, no entanto vc tera que implementar um conversor.

Exemplo de um conversor

<h:selectOneMenu id="copia" value="#{MeuBean.filme}" converter="filmeConverter">  
     <f:selectItems value="#{MeuBean.filmes}" />  
</h:selectOneMenu>

classe que implementa javax.faces.convert.Converter

public class FilmeConverter implements Converter{

	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
		//implementação
	}

	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
		//implementação
	}
	
}

e declarar o FilmeConveter no faces-config.xml

Ja pensei em usar converter, funciona, mas pensa um pouco: o q vou por em getAsObject() ?

Provavelmente vou ter que usar a string q ta no combo pra buscar no banco o objeto q eu quero, ou seja, da mesma forma vou ter que buscar no banco. Tem a vantagem de eu nao precisar de uma variavel auxiliar no meu MBean pra guardar esse valor, posso jogar direto no Objeto do meu Objeto principal, vlw a dica. :wink:

Criado 21 de novembro de 2008
Ultima resposta 22 de nov. de 2008
Respostas 5
Participantes 3