Caros amigos de fórum…
conto com sua sabedoria novamente para tomar uma decisao em relação ao meu projeto.
Estou utilizando o rich:combobox em um projeto jsf que estou desenvolvendo. Conforme já vi o depoimento de outros camaradados do forum o maldito componente nao mostra o label de cada item da combo, e sim o que deveria ser o seu valor oculto. Pelo menos quando utilizando com f:selectItems e preenchido com uma coleção de objetos SelectItem. :evil:
Fiz muitas gambiarras lamentáveis para contornar esse problema. Mas usar o rich:combo, que é bonitinho, está me dando muito trabalho.Portanto, pergunto: isso é realmente um bug do componente?estou utilizando errado?
Vi uma outra forma de se usar o componente (ainda nao testei, mas o farei com urgencia) que é preencher uma collection da classe x e jogar no suggestionValues do componente, depois sobrescrever os métodos equals e toString …alguem já usou dessa forma?
Sinceramente, se nao resolver essa joça vou arrancar esse componente do projeto.
é,mal nao faz :D…não tô com o fonte a mão mas o cenário é o seguinte
esse é o cara que que eu quero listar na combo
public class Entidade{
private int id;
private String descricao;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
}
o nosso amigao managerBean…
import javax.faces.model.SelectItem;
public class ManagerBean{
private ArrayList<SelectItem> list;
public void setList(ArrayList<SelectItem> list){
this.list = list;
}
public ArrayList<SelectItem> getList getList(){
return list;
}
public void consultaEntidades(){
ArrayList<Entidade> x = DAO.consultaEntidades();
list = new ArrayList<SelectItem>();
for (Iterator<Entidade> i = x.iterator(); i.haxNext();){
Entidade = i.next();
//no construtor do SelectItem passo o id como Value, e a descrição como Label
list.add(new SelectItem(i.getId(), i.getDescricao);
/*tentei assim tambem
SelectItem s = new SelectItem();
s.setValue(i.getId());
s.setLabel(i.getDescricao());
list.add(s);
*/
}
}
}
velho,valeu pela força,mas acho que o seu código nao me serve, porque voce está usando o h:selectOneMenu. Se bem que se o rich:combo nao rolar, vou de h:selectOneMenu mesmo,hehehe…mas ele funciona de boa mesmo
com relação ao autocomplete, esse componente infernal que eu estou questionando, o rich:combobox, já tem o autocomplete por default
no seu managerBean voce consulta o banco, carrega uma collection e joga nessa propriedade.
vi um exemplo desse jeito no proprio src do RichFaces. No exemplo, tambem foram sobrepostos os métodos equals e toString da classe que irá compor a collection. O toString, imagino que seja para definir qual será o texto exibido na combo.
Como disse ainda nao testei esse cara. Mas pretendo faze-lo logo!
alias, eu nao tenho certeza, mais em vez de usar um ArrayList tipado, use um array de SelectItem[], eu se nao me engano usava assim. Outra coisa, verifica se o objeto que ta vindo da dao, ta vindo com os valores setados certinhos, descricao e id. Tenta-ae e da um feedback. Vlw
Usando um array de SelectItem[]?vixi…rs.valeu pela dica,vou testar sim…brigadao!Mas onde coloco esse array, jogo ele em qual propriedade do componente?
testei tambem usando o suggestionvalues do componente, passando um ArrayList tipado…nao resolveu!rsrsrs
de qualquer forma, se alguem quiser usar assim ao inves de usar o f:selectitems, é realmente necessário sobrescrever o método toString da classe que vai ser exibida no combo.
[quote=alias]Usando um array de SelectItem[]?vixi…rs.valeu pela dica,vou testar sim…brigadao!Mas onde coloco esse array, jogo ele em qual propriedade do componente?
[/quote]
Na mesma propriedade que vc coloca o ArrayList, eu lembro que muitas vezes eu nao conseguia usar o ArrayList, entao sempre optei pelo array primitivo do proprio componente, entao tenta-e.