SelectOneMenu dinamico com lista dinamica

5 respostas
T

Pessoal possuo uma tabela com variáveis. Essas variáveis podem ser do tipo limite (ex.: Nr. de filhos 0…10) ou do tipo selecao (ex.: time de futebol : - Corinthians,Flamengo…)

Preciso criar uma página JSF que lê do banco todas as variáveis de perfil ( Nr. de filhos, time de futebol) … e gere um selectOneMenu, ou um inputext.

Até ai ja conseguir fazer.

O problema está em como atribuir esses valores caso o usuário altere e salvar no banco.

Alguém teria idéia de como fazer ?

5 Respostas

finotti

thiago, se vc já conseguiu ler os dados do banco e montar a lista, suponho que você tenha como identificar cada elemento da lista(‘idVariavel’ por exemplo). Sendo assim, quando o usuário selecionar um registro no Select, vc identifica qual elemento foi selecionado e depois executa um update no banco com os novos valores desse elemento.

T

Eh, ja procurei alguns locais …
Criei um Map com o valor do id da variável, com o valor
ocorre tudo certo …

só falto entender como pegar esses valores ou como setar ele num expression

Ex.:

Application app = FacesContext.getCurrentInstance().getApplication();
	combo.setValueExpression("value",  app.getExpressionFactory().createValueExpression("#{detalheClienteMB.mapListVariaveis["+ idPerfilAtributo +"]", String.class));
	combo.setConverter(new IntegerConverter());

Enfim, valeu pela dica.

Quem poder me ajudar mais… agradeço.

finotti

thiago, veja esse exemplo:
Na página jsp, tenho o seguinte código

<h:selectOneMenu value="#{cadastroCliente.idMunicipio}" id="nome" > <c:selectItems value="#{cadastroCliente.listaMunicipios}"/> </h:selectOneMenu>
No método getListaMunicipios do bean, criei uma coleção de <SelectItem> com o id e a descrição de cada elemento

public List&lt;SelectItem&gt; getListaMunicipios() { List&lt;SelectItem&gt; municipios = new ArrayList&lt;SelectItem&gt;(); List&lt;Municipio&gt; listaMun = MunicipioDAO.getInstance().findAll(); municipios.add(new SelectItem(null, "")); for (Municipio obj : listaMun) { municipios.add(new SelectItem(obj.getId(), obj.toString())); } return municipios; }
[]'s

T

Boa tarde finotti,
Isso eu tó ligado, mas nesse caso o seu aí só existe um selectonemenu, no meu caso eu não sei se vai existir selectonemenu ou inputext. Eu tenho que ir do banco as variaveis, ver o tipo dela (Limite ou Selecao) e dessa variável pegar os possiveis valores/ou itens dessa variável.

No meu caso criei uma página que associo dinamicamente ao backingbean

<h:panelGrid columns="2">
			<h:panelGrid binding="#{detalheClienteMB.panelGridPerfil}" id="pgPerfilDetCliente" />
		</h:panelGrid>

No backingbean tenho

HtmlPanelGrid panelGridPerfil = montarGridPerfil(listPerfilAtributos);

Que monta certinho o grid (trazendo selectonemenu ou inputext a depender da variavel)

HtmlColumn coluna2 = new HtmlColumn(); 
			if (perfil_atributosT.getTpperfilatributo() == 2) {/* Coluna do panelgrid lado direito - Combo */
				HtmlSelectOneMenu combo = getCmbBoxPerfil(perfil_atributosT.getIdperfilatributo());
				coluna2.getChildren().add(combo);
				panelGridPerfil.getChildren().add(coluna2);
			}else 
				if (perfil_atributosT.getTpperfilatributo() == 1) {/* Coluna do panelgrid lado direito - Input */
					HtmlInputNumberSpinner input = getInputSpinner(perfil_atributosT);
					coluna2.getChildren().add(input);
					panelGridPerfil.getChildren().add(coluna2);
				}

O problema que estou tendo é como saber quais os valores alterados, dos componentes etc… associar ele a um HashMap, etc e depois pode salvar.

Vlws

T

Consegui achar o problema…

Estava no expression, em vez de colocar no SelectOneMenu teria que colocar no SelectItens…

Map<Integer, String> mapListVariaveis = new HashMap<Integer, String>();
----------------------
HtmlSelectOneMenu combo = new HtmlSelectOneMenu();
		combo.setId("cmbPerfilSelecao"+idPerfilAtributo); //setar um ID
		
		FacesContext facesContext = FacesContext.getCurrentInstance();
		Application app = facesContext.getApplication();
		
		UISelectItems items = new UISelectItems(); //ITEMS DO COMPONENTE HTMLSelectOneMenu
		items.setValueExpression("value",  app.getExpressionFactory().createValueExpression("#{detalheClienteMB.mapListVariaveis["+ idPerfilAtributo +"]}", String.class));

		ArrayList valores = new ArrayList();

vlws

Criado 16 de junho de 2009
Ultima resposta 18 de jun. de 2009
Respostas 5
Participantes 2