Rich Faces - rich:comboBox ( Não mostra Label, somente value )

13 respostas
P

Pessoal,

Este item já foi reportado neste mesmo forum por outra pessoa, mas não chegaram a uma conclusão. [url]http://www.guj.com.br/posts/list/87342.java#467477[/url]

[color=blue]Gostaria da ajuda de vocês para encontrar uma saída, ou então não utilizar este componente.[/color]

Resumo:

Utilizando o componente, rich:comboBox, a lista apresenta os valores ao invés do label. O pessoal no forum do jBoss [url]http://www.jboss.com/index.html?module=bb&op=viewtopic&t=133658[/url] disse que este componente não tem esta funcionalidade, mas não acredito que o pessoal do Rich Faces iria cometer um erro tão grosseito destes, então acho que estou utilizando errado. Para que serve este componente se não pode ser um select ? Declaração do componente:
<rich:comboBox id="area" value="#{myBean.area}" >
    <f:selectItems value="#{myBean.getAreaList}"  />
</rich:comboBox>
Método no bean:
public List<SelectItem> getAreaList(){
		List<AreaEntity> list 		= /*... recupera lista do banco*/;
		List<SelectItem> comboList	= new ArrayList<SelectItem>();
		for(AreaEntity area : list)
			comboList.add(new SelectItem(area.getId().toString(),area.getDescricao()));
		
		return comboList;
	}

Informações úteis:
Rich Faces versão 3.2.1-RC1 ( já testei nas anteriores )
JBoss 4.2.0
Firefox 2.0.0.14 / IE7 / Opera 9.26

Obrigado pela ajuda.
Att.:

Pedro Neves

13 Respostas

lusilva1982

pedro.neves, você conseguiu a solução para este problema??
Estou passando pela mesma situação e não consigo resolver!

Valeu!
Abraço.

mateusprado

tem um atributo chamado defaultLabel. será que ajuda?

lusilva1982

Não. O problema na verdade não é exibir um valor default e sim, carregar o valor para cada item do Combobox, ou seja, preencher o que seria no html puro o atributo value do Option, entendeu?

HTML:

<select>
<option value="1">Texto Exibido</option>
</select>

No meu caso, não está sendo preenchido o value!

lusilva1982

Ainda não consegui resolver usando rich:combobox, porém, funcionou com o h:selectOneMenu.

O managerbean resumido:

public class RegiaoControl implements Serializable {
...
	private ArrayList dd_item_pais; // dropdown de países

	/* Getters / Setters */
	public ArrayList getDd_item_pais() {
		// Prepara o ArrayList para trabalhar com o SelectItem
		buildDropDownPais(); 
		return dd_item_pais;
	}

	public void setDd_item_pais(ArrayList dd) {
		this.dd_item_pais = dd;
	}
	
	/* Actions Begin */
	private void buildDropDownPais(){
		dd_item_pais = new ArrayList();
		Iterator it  = rdao.getAllPais().listIterator(); 

		while( it.hasNext() ){
			Pais pais 	= (Pais) it.next();
			int id 		= pais.getId_pais();
			String nm 	= pais.getNome();

			dd_item_pais.add( new SelectItem(id, nm) );
		}
	}
	/* Actions End */
}

No value selectOneMenu eu coloquei o tipo e, no value do SelectItems coloquei o List, cujo cada indice corresponde a um SelectedItem();

<h:outputText value="Pais"/>
		<h:selectOneMenu id="pais" value="#{regiaoControl.pais}">
			<f:selectItems value="#{regiaoControl.dd_item_pais}"/>
		</h:selectOneMenu>

Funcionou perfeitamente!
Mas ainda quero fazer no estilo cascade, ou seja, com dependência entre os dropdowns.

[]'s

lessandronp

Segue abaixo a resolução do problema:

jspx:

&lt;rich:comboBox id="cmbProfessor" width="255"
										value="#{manterCursosForm.professorSelecionado}"
										defaultLabel="#{msg['opcao.selecione']}" enableManualInput="false"&gt;
										&lt;f:selectItems id="sisProfessores"
										       value="#{manterCursosForm.listaProfessores}"/&gt;  &lt;/rich:comboBox&gt;

Bean Java:
Trago a lista da base no formato List e converto para ArrayList de selectItem, passando primeiro o nome depois o id convertido em String, pois o segundo parâmetro aceita somente String:

ManterProfessoresController controllerProfessor = new ManterProfessoresController();
            controllerProfessor.carregarListaProfessores();
            for (Professor profs : controllerProfessor.getListaProfessores())
                listaProfessores.add(new SelectItem(profs.getNome(), String.valueOf(profs.getId())));
lessandronp

Eu respondi essa questão, porém agora gerou um problema quanto ao itemSelecionado, pois ele será do tipo String, pelo fato de ter passado o nome como primeiro parâmetro na lista, e com isso não consigo recuperar o iD.
Se alguem tiver alguma solução…
Abraços
Att,
Lessandro

rollei

“Jboss”:
The component provides editable combobox element on the page.

Combo Box is a simplified select based version of Suggestion Box component, which uses

* client side suggestions
* declarative definition with f:selectItem(s) components
* a list of string objects

When using selectItem(s) for suggestion definition you should define only value of the selectItem. It is used both for displaying and storing.

Esse ‘combobox’ na verdade eh que deveria ser chamado de sugestion box, o que voce esta querendo pode ser feito usando o sugestion, soh que esse soh funciona para inputText … estranho nao? Lah no livedemo eles demonstram uma GAMBIARRA colocando uma imagem(que imita aquela imagem do combo) do lado do input para parecer que eh um combobox, com um metodo no onclick para mostrar a lista toda :confused:

Eu jah cheguei a ler alguma coisa sobre uma solucao para esse problema (nao lembro onde, nem como era) … porque era meio gambiarra tambem, para fazer esse combobox funcionar do jeito que deveria ser :confused:

EDIT
http://www.jboss.org/index.html?module=bb&op=viewtopic&t=133658
Da uma olhada nessa tread … eu pelo menos vejo bem menos utilidade para o componente do jeito que ele foi desenhado, sem falar nesse nome MUITO ambiguo

G

rollei:
“Jboss”:
The component provides editable combobox element on the page.

Combo Box is a simplified select based version of Suggestion Box component, which uses

* client side suggestions
* declarative definition with f:selectItem(s) components
* a list of string objects

When using selectItem(s) for suggestion definition you should define only value of the selectItem. It is used both for displaying and storing.


esse combo, funciona somente como lista de strings, e nada mais, n foi feito pra ser usado como vc esta tentando usar, tanto é q ele possui a funcionalidade de busca, onde vc digita e ele vai filtrando seus dados pra vc, como um suggestion box deveria ser …

rollei

Vou só dar um exemplo prático de um uso do rich:combobox

Digamos que você tem um formulário de cadastro com usuário e senha. Nesse formulário você pode ter também um pergunta secreta caso queira recuperar sua senha. Neste caso você poderia usar esse componente para dar uma gama de sugestôes ao usuário sem ter que forçá-lo a escolher uma opção de um select, já que o componente não amarra sua escolha às sugestões. Perceba que essas sugestões são apenas uma lista de string e o valor que vai ser salvo no banco é essa mesma string.

Você ate poderia usar o combobox para trazer objetos do banco, usando um conversor, mas esses valores exibidos no seu select devem ser únicos (de preferência a chave).

Eu gostaria de saber se alguem sabe de uma solução pronta para esse caso. Existe algum componente (icefaces, tomahawk, etc …) que implemente uma combo com uma busca pelo input do teclado? Isso é muito útil quando o combo tem muitos valores, o que acontece com muita frequência.

lessandronp

Entendi.
Vou dar uma olhada no input q vc mencionou.
No momento to usando o h:selectOneMenu comum, porém náo consigo adicionar no caso da alteração, como sendo mostrado como o primeiro item na lista, o valor gravado, ou seja, selecionado anteriormente que estána base.
Se eu adicionar um selectItem acontece o tipo de coisa: este valor passa a fazer parte da combo juntamente com os valores vindos da base, ou seja, acaba ficando 1 valor duplicado, o item selecionado + a lista da base que contem inclusive esse item selecionado.
Obrigado a vcs pela atenção, e assim que alguem tiver uma idéia, inclusive essa do inputText, pode postar ai que será de grande valor.
Abraços
Att
Lessandro

adrianosdebrito

Se você ver o código fonte gerado em html por esse rich:comboBox vai ver que no final ele não é um combo…

Eh um input acoplado com uma tabela que gera as sugestões de acordo com o que o usuário digitar…

Ah… e não posso discordar disso

Esse ‘combobox’ na verdade eh que deveria ser chamado de sugestion box, o que voce esta querendo pode ser feito usando o sugestion, soh que esse soh funciona para inputText … estranho nao? Lah no livedemo eles demonstram uma GAMBIARRA colocando uma imagem(que imita aquela imagem do combo) do lado do input para parecer que eh um combobox, com um metodo no onclick para mostrar a lista toda :confused:

Eu jah cheguei a ler alguma coisa sobre uma solucao para esse problema (nao lembro onde, nem como era) … porque era meio gambiarra tambem, para fazer esse combobox funcionar do jeito que deveria ser :confused:

lessandronp

eh verdade.
Eu tive resolvendo esse problema usando o h:selectOneMenu com o selectItems, onde tive q fazer a conversão dos items da base antes de jogar na lista que ia ser populada na combo.
Abraços,
Att,
Lessandro

K

Olá pessoal,
O que vcs querem fazer pode ser feito com suggestionBox.
Olhem este tópico que voces vao entender.

Criado 23 de abril de 2008
Ultima resposta 20 de mai. de 2011
Respostas 13
Participantes 8