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?
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…
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>
[quote=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>
[/quote]
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:
[code]são paulo
rio de janeiro[/code]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?
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:
http://64.233.169.104/search?q=cache:lsf4rv6P208J:balusc.blogspot.com/2007/09/objects-in-hselectonemenu.html+objects+in+the+selectonemenu+value+%22customer%40%22+converter&hl=pt-BR&ct=clnk&cd=10&gl=br
outro: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
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:
[code]são paulo
rio de janeiro[/code]alguem já se deparou com isso e sabe o significa esses codigos loucos? como eu vou acessar o objeto através deles?