Hello How to use List of POJO\'s with JSF h:selectOneMenu or Primefaces p:selectOneMenu?
I know that there are lot of related questions which s
In h:selectOneMenu it's possible, but yours POJO must implements a interface with a identifier atrribute.
Interface:
public inteface IConvertible {
public Integer getId();
}
Pojo:
public class POJO implements IConvertible {
....
....
}
And generic converter:
@SuppressWarnings("unchecked")
public class GenericConverter implements Converter {
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
IConvertible ret = null;
UIComponent src = arg1;
if (src != null) {
List childs = src.getChildren();
UISelectItems itens = null;
if (childs != null) {
for (UIComponent ui : childs) {
if (ui instanceof UISelectItems) {
itens = (UISelectItems) ui;
break;
} else if (ui instanceof UISelectItem) {
UISelectItem item = (UISelectItem) ui;
try {
IConvertible val = (IConvertible) item.getItemValue();
if (arg2.equals("" + val.getId())) {
ret = val;
break;
}
} catch (Exception e) {
}
}
}
}
if (itens != null) {
List values = (List) itens.getValue();
if (values != null) {
for (IConvertible val : values) {
if (arg2.equals("" + val.getId())) {
ret = val;
break;
}
}
}
}
}
return ret;
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
String ret = "";
if (arg2 != null && arg2 instanceof IConvertible) {
IConvertible m = (IConvertible) arg2;
if (m != null) {
Long id = m.getId();
if (id != null) {
ret = id.toString();
}
}
}
return ret;
}
}
JSF page: