ребята, я пытаюсь выполнить итерацию списка объектов, определенных пользователем, но я получаю эту ошибку (java.lang.String не может быть отброшен в bg.fmi.master.thesis.model.TFilterType), и я не могу понять, почему.
Я мой.xhtml у меня:
<p:selectManyCheckbox id="chkbox1"
value="#{requestBean.selectedBooleanFilterTypes}"
layout="pageDirection">
<f:selectItems var="checkbox"
value="#{filterTypeBean.listBooleanFilterTypes()}"
itemLabel="#{checkbox.filterTypeName}" itemValue="#{checkbox}" />
<!-- required="true"
requiredMessage="check at least one checkbox" -->
</p:selectManyCheckbox>
Часть из класса bean:
private List<TFilterType> selectedBooleanFilterTypes;
public List<TFilterType> getSelectedBooleanFilterTypes() {
return selectedBooleanFilterTypes;
}
public void setSelectedBooleanFilterTypes(
List<TFilterType> selectedBooleanFilterTypes) {
this.selectedBooleanFilterTypes = selectedBooleanFilterTypes;
}
Это часть другого метода, но также и в классе bean:
for (TFilterType type : selectedBooleanFilterTypes) {
System.out.println("SelectedFilterTypes: "
+ type.getFilterTypeName());
}
В режиме отладки я вижу, что selectedBooleanFilterTypes имеет это значение:
[TFilterType [filterTypeName = DJ, filterTypeDesc = DJ, isBooleanType = B, tRequestFilters = []], TFilterType [filterTypeName = Украса, filterTypeDesc = Украшение, isBooleanType = B, tRequestFilters = []]]
Заранее спасибо!
TFilterType - это класс Java. в этом случае вы должны использовать конвертер лиц для вашего типа.
попробуйте этот образец
XHTML:
<p:selectManyCheckbox id="chkbox1" value="#{requestBean.selectedBooleanFilterTypes}"
layout="pageDirection" converter="filterTypeConverter">
<f:selectItems var="checkbox" value="#{filterTypeBean.listBooleanFilterTypes()}"
itemLabel="#{checkbox.filterTypeName}" itemValue="#{checkbox}"/>
</p:selectManyCheckbox>
преобразователь:
@FacesConverter("filterTypeConverter")
public class TFilterTypeConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
FilterTypeBean filterTypeBean = context.getApplication().evaluateExpressionGet(context, "#{filterTypeBean}", FilterTypeBean.class);
for (TFilterType type : filterTypeBean.listBooleanFilterTypes()) {
if (type.getFilterTypeName().equals(value)) {
return type;
}
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value instanceof TFilterType) {
return ((TFilterType) value).getFilterTypeName();
} else {
return "";
}
}
}