如何将p:selectManyCheckbox值绑定到Map <k的列表<string>,列出<string =“”>&gt; </k,> </string>

时间:2015-02-02 16:51:16

标签: jsf primefaces hashmap selectmanycheckbox

我正在尝试从多个p:selectManyCheckbox中找到一种填充地图的方法。 但是,当我查看地图中的选定数据时,我得到了一个我无法访问的属性对象数组数组。

<p:dataList id="serviceCatalogueCriteria" var="category" value="#{serviceCatalogueController.categories}">
<ui:fragment
    rendered="#{categoryService.isMultipleSelect(category)}">
    <p:selectManyCheckbox
            value="#{serviceCatalogueController.categoryToAttributes[category]}"
            layout="pageDirection" columns="1"
            converter="#{attributeConverter}">
            <f:selectItems value="#{category.attributes.toArray()}"
                var="attribute" itemLabel="#{attribute.name}"
                itemValue="#{attribute}" />
    </p:selectManyCheckbox>
</ui:fragment>
</p:dataList>

在后面的bean中我有

private Map<Category, List<Attribute>> categoryToAttributes = new HashMap<Category,List<Attribute>>();

for (Category cat : categoryToAttributes.keySet()) {
        for (Attribute attr : categoryToAttributes.get(cat)) {
            finalList.add(attributeDAO.fetchAttributeWithCategoryAndName(cat.getInternalName(), attr));
        }
    }

当我经历这个时,我得到了一个很好的

[Ljava.lang.Object; cannot be cast to java.util.List

在categoryToAttributes.get(cat)中爆发。无法得到这个对象 我也试过使用转换器,但我得到了相同的东西。

转换器看起来像

@Override
public Object getAsObject(FacesContext context, UIComponent component,
        String value) {
    if (value == null || value.length() == 0)
        return null;
    try {
        Long id = Long.decode(value);
        return attributeDAO.fetchAttributesWithIds(Collections.singletonList(id)).get(0);
    } catch (NumberFormatException e) {
        return null;
    }
}

@Override
public String getAsString(FacesContext context, UIComponent component,
        Object value) {
    if (value == null || !(value instanceof Attribute))
        return null;
    return "" + ((Attribute)value).getId();
}

如果我删除转换器,我会得到这个

java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.util.List

1 个答案:

答案 0 :(得分:1)

对不起我的同伴英语,我希望可以帮到你。

在* .xhtml

Create Table sqltesttable 
(
  uqID int IDENTITY(1,1) PRIMARY KEY NOT NULL
  ,hlpID int
  ,salestatus nvarchar(250)
  ,saletype nvarchar(250)
  ,salesperson nvarchar(500)
  ,salessupervisor nvarchar(500)
  ,commeligible bit
  ,dailygoalmet bit
  ,saledate datetime
  ,saletime datetime
  ,shipdate datetime
  ,shiptime datetime
)   

在你的Bean:

<p:dataList id="serviceCatalogueCriteria" var="category" 
value="#{serviceCatalogueController.categories}">

<ui:fragment
rendered="#{categoryService.isMultipleSelect(category)}">
<p:selectManyCheckbox
        value="#{serviceCatalogueController.attributesByCategory}"
        layout="pageDirection" columns="1"
        converter="#{attributeConverter}">
        <f:selectItems value="#{category.attributes.toArray()}"
            var="attribute" itemLabel="#{attribute.name}"
            itemValue="#{attribute}" />
<p:ajax listener="#{alta.almacenarModulos(category)}"/>
</p:selectManyCheckbox>
</ui:fragment>
</p:dataList>

我做了一个像学者项目这样的事情。