我有一个xhtml文件和一个托管bean,我在其中定义了Map<Integer, Boolean>
在视图层中使用它来支持嵌套在selectBooleanCeckbox
内的dataTable
。
此Map
对于所有显示的Cliente
都很常见,我真正需要的是一个
Map<Cliente, Map<Integer, Boolean>>
每个Cliente都有相应的
地图。
实际问题是当我移动到另一个页面时,Map会抛出NullPointerException
在dataTable
。
如何在视图层中迭代Map<Cliente, Map<Integer, Boolean>>
。
以下是包含简单Map
,
<c:forEach items="#{adminCarritoBean.clientes}" var="map">
<c:set value="#{0}" var="cont"/>
<c:forEach items="#{map.keySet}" var="cliente">
<rich:dataTable value="#{map.get(cliente)}" var="carrito"
iterationStatusVar="it" rows="5">
<h:column>
<f:facet name="header">
<h:outputText value="Select" />
</f:facet>
<h:selectBooleanCheckbox value="#adminCarritoBean.selectedIds[carrito.id]}" />
</h:column>
------------------
-----------------
<f:facet name="footer">
<rich:dataScroller page="#{adminCarritoBean.page[cont]}" />
</f:facet>
</rich:dataTable>
<c:set value="#{cont + 1}" var="cont"/>
</c:forEach>
</c:forEach>
这是bean代码,
private Map<Integer, Boolean> selectedIds;
private List<Carrito> selectedDataList;
private List<Map<Cliente, List<Carrito>>> clientes;
public void eliminar() {
selectedDataList = new ArrayList<Carrito>();
for (Map<Cliente, List<Carrito>> cliente: clientes) {
Set<Cliente> keys = cliente.keySet();
for(Iterator<Cliente> it = keys.iterator(); it.hasNext();) {
Cliente clte = it.next();
List<Carrito> carritos = cliente.get(clte);
for(Carrito dataItem: carritos) {
if(selectedIds.get(dataItem.getId()).booleanValue()) {
selectedDataList.add(dataItem);
selectedIds.remove(dataItem.getId()); // Reset.
}
}
}
}
for(Carrito crto: selectedDataList) {
carritoDAO.eliminar(crto);
}
selectedIds = new HashMap<Integer, Boolean>();
loadListClientes();
}
行selectedIds.get(dataItem.getId()).booleanValue()
抛出该异常。
我该怎么做?