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?
Geração de selectOneMenu no jsf - parâmetro value
5 Respostas
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>
No MbeanNo JSPpublic 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; } }<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>
Erro de conversão definindo valor'modelo.Cidade@1f38d7d' para 'null Converter'.
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
...
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;
}
...
<h:selectOneMenu id="cidade" value="#{cadBairro.cidade}" required="true" converter="cidade">
<f:selectItems value="#{cadBairro.listaDeCidades}"/>
</h:selectOneMenu>
<h:message for="cidade"/>
<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?