Как исправить это исключение java.lang.String не может быть приведен к пользовательскому типу

1

ребята, я пытаюсь выполнить итерацию списка объектов, определенных пользователем, но я получаю эту ошибку (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 = []]]

Заранее спасибо!

  • 0
    Вы получаете исключение или ошибку компилятора? (Это больше похоже на последнее.) Также, пожалуйста, определите строку, которая вызывает проблему (включая трассировку стека, если это исключение).
  • 0
    Это проблемная часть: for (TFilterType type: selectedBooleanFilterTypes) {System.out.println ("SelectedFilterTypes:" + type.getFilterTypeName ()); }
Показать ещё 2 комментария
Теги:
jsf
primefaces

1 ответ

2
Лучший ответ

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 "";
        }
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню