我尝试为<p:selectOneListbox>
实现转换器。该列表应包含child
个对象。转换器在我的faces-config.xml
中声明。 children
的第一个名称将显示在视图的列表中。
问题是我总是通过NullPointerException
中的List<Child> children = new ArrayList<>(childService.getAllChildren());
来ChildConverter
获得child
。但是我的数据库中有child
个对象。为另一个表调用相同的方法并返回<p:selectOneListbox id="childList" value="#{caregiverController.caregiver.child}" converter="childConverter" var="t" filter="true" filterMatchMode="contains">
<f:selectItems value="#{childController.children}" var="child" itemLabel="#{child.firstName}" itemValue="#{child}" />
<p:column>
<p:graphicImage name="pictures/tiger.jpg" width="32" height="32" />
</p:column>
<p:column>
<h:outputText value="#{t.firstName}" />
</p:column>
</p:selectOneListbox>
个对象。
我的列表框:
@FacesConverter("childConverter")
public class ChildConverter implements Converter {
public Object getAsObject(FacesContext fc, UIComponent uic, String value) {
if(value != null && value.trim().length() > 0) {
try {
ChildService childService = (ChildService) fc.getExternalContext().getApplicationMap().get("childService");
List<Child> children = new ArrayList<>(childService.getAllChildren());
return children.get(Integer.parseInt(value));
} catch(NumberFormatException e) {
throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid theme."));
}
}
else {
return null;
}
}
public String getAsString(FacesContext fc, UIComponent uic, Object object) {
if(object != null) {
return String.valueOf(((Child) object).getId());
}
else {
return null;
}
}
}
我的转换器:
tags