Geração de selectOneMenu no jsf - parâmetro value

5 respostas
P

Qual é a forma mais recomendada para se construir um selectOneMenu no jsf?
Eu tenho objetos que não possuem um campo chave único para sua identificação…
Por exemplo, eu tenho a classe Cidade, que possui somente Nome e Estado (nenhum campo chave). Como faço para colocar as Cidades no item do selectOneMenu?
O que coloco de value?
Qual é a solução mais recomendada?

5 Respostas

P

e ai pessoal!
ninguem sabe? preciso urgente duma solução… já faz mais de uma semana que to procurando uma solução e não encontro…

acho que o problema é que estou usando db4o e por isso não usei nenhum código ou campo chave ou identificador…
será que devo colocar um atributo id em cada classe?

daí fugiria dos principios da orientação a objetos…

thiago.correa

No Mbean

public class Mbean {
    private List<SelectItem> combo;
    private String cidadeSelecionada;

    // getters e setters suprimidos

    public List<SelectItem> getCombo() {
        if (combo == null) {
            combo = new ArrayList<SelectItem>();
            combo.add(new SelectItem("PA","Pará");
            combo.add(new SelectItem("CE","Ceará");
            
        }
        return combo;
    }
}

No JSP

<f:view>
    <h:selectOneMenu value="#{mbean.cidadeSelecionada}" />
        <f:selectItem value="#{mbean.combo}" />
    </h:selectOneMenu>
</f:view>
jjose

http://www.google.com/search?hl=pt-PT&q=selectonemenu&btnG=Pesquisa+Google&lr=

P
thiago.correa:
No Mbean
public class Mbean {
    private List<SelectItem> combo;
    private String cidadeSelecionada;

    // getters e setters suprimidos

    public List<SelectItem> getCombo() {
        if (combo == null) {
            combo = new ArrayList<SelectItem>();
            combo.add(new SelectItem("PA","Pará");
            combo.add(new SelectItem("CE","Ceará");
            
        }
        return combo;
    }
}
No JSP
<f:view>
    <h:selectOneMenu value="#{mbean.cidadeSelecionada}" />
        <f:selectItem value="#{mbean.combo}" />
    </h:selectOneMenu>
</f:view>

mas o problema é que eu tenho uma classe Cidade só com os atributos nome e estado.
O que eu coloco de valor? Eu não tenho o parametro id ou codigo...
Estou colocando o proprio objeto de valor... Daí no html fica assim:

<option value="modelo.Cidade@f2818d">são paulo</option>
<option value="modelo.Cidade@1177565">rio de janeiro</option>
o que significa esse modelo.Cidade@xxxxxxx ? é a referencia para o objeto? como eu faço para recuperar o objeto depois? tá dando um erro de conversão quando eu dou submit:
Erro de conversão definindo valor'modelo.Cidade@1f38d7d' para 'null Converter'.
como faço para converter esse modelo.Cidade@xxxxxxx para um objeto Cidade, que já existe e está na memoria?
P

ai pessoal achei um endereço que pode ser que tenha a resposta para a pergunta que mais tá encomodando esse forum!!!
já fazem dias que estou tentando resolver o problema desse post, mas ainda não consegui...
achei isso, pesquisando no google:
[url]http://64.233.169.104/search?q=cache:lsf4rv6P208J:balusc.blogspot.com/2007/09/objects-in-hselectonemenu.html+objects+in+the+selectonemenu+value+%22*customer%40*%22+converter&hl=pt-BR&ct=clnk&cd=10&gl=br[/url]
outro:[url]http://64.233.169.104/search?q=cache:1vLSzxSpWGkJ:forum.java.sun.com/thread.jspa%3FthreadID%3D5200533%26messageID%3D9798625+%22null+Converter%22+jsf+object&hl=pt-BR&ct=clnk&cd=4&gl=br[/url]

só não consegui aplicar no meu codigo, pois nessa página o exemplo possui um key para cada item, diferente do meu caso, onde os itens são o label/key(cidade.getNome) e o valor (próprio objeto cidade)
estou com dificuldade para fazer o conversor, não sei como eu pego o map do bean no conversor... tem a ver com o FacesContext

no meu bean eu tenho o seguinte:
...
public Map getListaDeCidades() {
        ObjectSet resultado = Banco.getObjectContainer().get(Cidade.class);
        listaDeCidades = new HashMap<String, Cidade>();
        while(resultado.hasNext()) {
            Cidade c = (Cidade)resultado.next();
            listaDeCidades.put(c.getNome(), c);
        }
        return listaDeCidades;
    }
...
no jsp:
<h:selectOneMenu id="cidade" value="#{cadBairro.cidade}" required="true" converter="cidade">
<f:selectItems value="#{cadBairro.listaDeCidades}"/>
</h:selectOneMenu>
<h:message for="cidade"/>
e o conversor eu não sei como vou acessar essa lista e depois achar a cidade selecionada se no html fica:
<option value="modelo.Cidade@f2818d">são paulo</option>
 <option value="modelo.Cidade@1177565">rio de janeiro</option>

alguem já se deparou com isso e sabe o significa esses codigos loucos? como eu vou acessar o objeto através deles?

Criado 12 de outubro de 2007
Ultima resposta 15 de out. de 2007
Respostas 5
Participantes 3