これはシナリオです。顧客が支払った請求書と支払わなかった請求書を含むデータベーステーブルがあります。管理対象Beanでは、これはMap <Cliente、List <Carrito>で表されます。ここで、Clienteはすべての顧客であり、List<Carrito>は未払いの請求書のリストです。
私はクエリによってこのマップを取得し、同時に、クライアントが請求書とともにマップに配置された量をカウントします。このカウンター値は、属性を初期化するために使用されます(int []ページ)。
マップは、クライアントごとに1つのリッチdataTableに表示されます。各dataTableはページ付けされており、それらのフッターに設定します。
<rich:dataScroller page="#{adminCarritoBean.page[current.index]}"/>
current.indexであることのインデックス
<ui:repeat varStatus=”current”>
Cliente-List<Carrito>のすべてのペアを選択するために使用されます。
今問題。dataTableでページを選択するたびにClassCastExceptionが発生します。私は2つの顧客のサンプルを持っています。1つは3つの請求書で、もう1つは6つの請求書です。すべてのテーブルには5つの請求書が表示されているため、ページ付けされた請求書が2番目に表示されている場合、ページ付けできません。フッターはロックされています。
これがコードです、
<ui:repeat value="#{adminCarritoBean.clientes.entrySet().toArray()}"
var="cliente" varStatus="current" id="repeat">
<table style="border-collapse:collapse; border:1px solid black;">
<tbody>
<tr><td>
<h:outputText value="#{cliente.key.nombre} #{cliente.key.apellido1} #{cliente.key.apellido2}" />
</td></tr>
</tbody>
</table>
<c:set value="#{adminCarritoBean.selectedIds.get(cliente.key)}" var="mapIds"/>
<rich:dataTable id="crtoTable" value="#{cliente.value}"
var="crto" iterationStatusVar="it" rows="5">
<rich:column>
<f:facet name="header">Referencia</f:facet>
<h:outputText value="#{crto.referencia}" />
</rich:column>
<rich:column>
<f:facet name="header">Fecha de Compra</f:facet>
<h:outputText value="#{crto.fechaCompra}" />
</rich:column>
----------------------------
----------------------------
<rich:column>
<f:facet name="header">Select</f:facet>
<h:selectBooleanCheckbox value="#{mapIds[crto.id]}" />
</rich:column>
<f:facet name="footer">
<rich:dataScroller page="#{adminCarritoBean.page[current.index]}"/>
</f:facet>
</rich:dataTable>
<br />
</ui:repeat>
初期化int[]ページのコードは次のとおりです。
if(count > 0) {
loadList = true;
if((null == page) || ((null != page) && (count < page.length))) {
page = new int[count];
for(int i = 0; i < count; i++) {
page[i] = 1;
}
}
}