我正在尝试从多个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
答案 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>
我做了一个像学者项目这样的事情。