Jsf 如何将h:dataTable中h:selectBooleanCheckbox的值映射到h:dataTable中?
有问题的h:SelectBoolean复选框位于h:dataTable(类别)中的h:dataTable(项目)中的h:dataTable(附加)中。将显示多个项目,每个项目可以有多个附加项目Jsf 如何将h:dataTable中h:selectBooleanCheckbox的值映射到h:dataTable中?,jsf,datatable,hashmap,Jsf,Datatable,Hashmap,有问题的h:SelectBoolean复选框位于h:dataTable(类别)中的h:dataTable(项目)中的h:dataTable(附加)中。将显示多个项目,每个项目可以有多个附加项目 <h:dataTable value="#{bean.categoryList}" var="category"> <h:column> <h:dataTable value="#{category.itemList}" var="item">
<h:dataTable value="#{bean.categoryList}" var="category">
<h:column>
<h:dataTable value="#{category.itemList}" var="item">
<h:column>
<h:dataTable value="#{item.extraList}" var="extra">
<h:column>
<!-- The h:selectBooleanCheckbox in question //-->
<h:selectBooleanCheckbox value="#{bean.extraSelectedMap[item.id][extra.id]}"/>
</h:column>
<h:commandLink action="#{bean.add}" value="Add">
</h:dataTable>
</h:column>
</h:dataTable>
</h:column>
</h:dataTable>
呈现页面后,我选中一个复选框,然后选择“添加”。在豆子里面。加上我的
Map<Integer, HashMap<Integer, Boolean>>
Map
有一个空HashMap,而我希望它将额外的id映射到值true
上面的代码或整个方法有什么不正确之处
非常感谢和问候。首先,您的
h:dataTable
有三个层次。如果要将复选框附加到父托管bean属性,则需要考虑所有级别。所以
<h:selectBooleanCheckbox value="#{bean.extraSelectedMap[category.id][item.id][extra.id]}"/>
使用映射作为属性。否则,将覆盖每个类别的选择,直到最后一个类别的选定项目在地图中结束
其次,还需要预创建贴图和所有嵌套贴图。JSF不会为您这样做。换句话说,
public Bean() {
extraSelectedMap = new HashMap<Integer, Map<Integer, Map<Integer, Boolean>>>();
for (Category category : categoryList) {
Map<Integer, Map<Integer, Boolean>> selectedExtrasPerCategory = new HashMap<Integer, Map<Integer, Boolean>>();
extraSelectedMap.put(category.getId(), selectedExtrasPerCategory);
for (Item item : category.getItemList()) {
Map<Integer, Boolean> selectedExtrasPerItem = new HashMap<Integer, Boolean>();
selectedExtrasPerCategory.put(item.getId(), selectedExtrasPerItem);
}
}
publicbean(){
extraSelectedMap=新建HashMap();
用于(类别:类别列表){
Map selectedExtrasPerCategory=new HashMap();
extraSelectedMap.put(category.getId(),selectedExtrasPerCategory);
对于(项:category.getItemList()){
Map selectedExtrasPerItem=newhashmap();
selectedExtrasPerCategory.put(item.getId(),selectedExtrasPerCategory);
}
}
作为另一种选择,您也可以考虑只添加一个<代码>布尔< <代码>属性> <代码>额外>代码>,并绑定到它。