java - 如何修复此异常 java.lang.String 无法转换为用户定义的类型

标签 java jsf primefaces

伙计们,我正在尝试迭代用户定义的对象列表,但出现此错误(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());
        }

在 Debug模式下,我可以看到 selectedBooleanFilterTypes 具有以下值:

[TFilterType [filterTypeName=DJ、filterTypeDesc=DJ、isBooleanType=B、tRequestFilters=[]]、TFilterType [filterTypeName=Украса、filterTypeDesc=Decoration、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 "";
        }
    }
}

关于java - 如何修复此异常 java.lang.String 无法转换为用户定义的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23302108/

相关文章:

css - IE8 和 Primefaces p :selectOneMenu misbehave when having a lots of p:selectOneMenu in a form

java - 不使用 xhtml 时填充 IceFaces HtmlSelectOneListbox

jsf - 如何在单击 JSF 按钮时调用 JS 函数并阻止页面重新加载/导航?

jsf-2 - 使用执行器服务时如何使用jsf添加消息?

java - 找不到命名空间 xmlns :p ="http://primefaces.org/ui" 的库

java - 如何从 Java 中的另一个数组创建子数组?

java - 通过字段名称获取对象引用

java - 调用 SQL 查询返回旧值

java - 在包含 1000 个元素的整数数组中查找多种众数

java - 同时快速读取/写入 int 数组