0

私は 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()はその例外をスローします。

どうすればいいですか?

4

0 に答える 0