私は xhtml ファイルとマネージド Bean を持ってMap<Integer, Boolean>
おり、ビュー レイヤーでそれを使用してselectBooleanCeckbox
、ページ分割された内部のネストをサポートするように定義しましたdataTable
。
これMap
はすべての表示に共通でCliente
あり、私が本当に必要としているのは
Map<Cliente, Map<Integer, Boolean>>
、すべての Cliente に対応するマップがある場所です。
実際の問題は、マップNullPointerException
内の別のページに移動するとマップがスローすることdataTable
です。
Map<Cliente, Map<Integer, Boolean>>
ビューレイヤーでa を反復する方法。
Map
これは、単純な,を含む xhtml ファイルです。
<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()
はその例外をスローします。
どうすればいいですか?