JSF HtlmSelectOneMenu dinamico

1 resposta
F

Pessoal, estou construindo uma aplicação, onde os dados do form são populados dinamicamente conforme os campos da bean (que é uma bean persistente do JPA).
Está quase tudo funcionando, menos uma coisa.
Quando eu coloco um combo (no caso de um relacionamento Many-to-one), eu utilizo o seguinte código para colocar no form dinâmicamente:

HtmlSelectOneMenu select = new HtmlSelectOneMenu();
					
					String comboIdName = field.getFieldName() + "_" + combo.getFieldId();
					Object objId = combo.getFieldIdMethod().invoke(field.getGetterMethod().invoke(dynamicEntity.getEntityObject()));
					if(objId == null) {
						objId = combo.getFieldIdMethod().getReturnType().getConstructor(String.class).newInstance("0");
					}
					mapComboId.put(comboIdName, objId.toString());
					
					String expression = "{dynaFormControler.mapComboId." + comboIdName + "}";
					select.setValueExpression("value", createVExpression(expression, String.class));
					
					select.setId("cbo_" + comboIdName);
					
					List<SelectItem> items = new ArrayList<SelectItem>();
					if(combo.getListDomain() != null) {
						for (int i = 0; i < combo.getListDomain().size(); i++) {
							SelectItem item = new SelectItem();
							Object o = combo.getListDomain().get(i);
							Object retObj = combo.getFieldIdMethod().invoke(o);
							item.setValue(retObj.toString());
							item.setLabel(combo.getFieldToScreenMethod().invoke(o).toString());
							items.add(item);	
						}
					}
					mapComboItems.put(comboIdName, items);
					UISelectItems uiSI = new UISelectItems();
					uiSI.setValue(items);
					
					select.getChildren().add(uiSI);
					
					children.add(select);

Muito bem. O problema é que eu utilizo um map para guardar o valor atual deste combo, como vocês podem ver no código:

String expression = "{dynaFormControler.mapComboId." + comboIdName + "}";
select.setValueExpression("value", createVExpression(expression, String.class));

Quando eu faço um submit no form, o map não vem preenchido com o valor do combo selecionado.
Já fiz uma POG para pegar via requestParameter, mas não quero usar isso.
Além de que quando clico no link de editar, o certo é o combo já vir com o valor da bean selecionado, mas não vem, pois ele não faz o match do managed bean - map com o component.

Alguém tem alguma idéia de como faço para fazer este HtmlSelectOneMenu dinamico e trabalhar com os valores dele corretamente?

Obrigado.
Fernando.

1 Resposta

E

Kara eu tava passando por aki, eu sei que o forum é antigo, mais como eu cabei de passar por este mesmo problema, ai vai uma dica,atribui setId aos componentes

Abraços

Criado 13 de janeiro de 2009
Ultima resposta 18 de jun. de 2010
Respostas 1
Participantes 2