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.