t:datascroller が t:dataTable の前にある場合、t:dataScroller 変数が更新されない
ここや他のサイトで回答を探すのに時間を費やしましたが、提案された回答は言うまでもなく、同じ問題を抱えている人に出くわしていません.
myfaces t:datascroller は、「for」属性がデータテーブル ID に設定されている限り、facelets の t:datatable の前または後に配置されていても同様に機能することを理解しています。検索条件を投稿する commandLink があり、その結果、データテーブルに入力された改訂されたデータセットが生成されます。commandLink によって異なる検索基準が送信されるたびに、データテーブル自体が正しく更新されます。t:datascroller がマークアップのデータテーブルの後に配置されると、スクローラーは毎回正しく更新されます。ただし、データテーブルの前に配置された場合はそうではありません。その場合、commandLink を 2 回クリックする必要があります。基本的には更新です。次に、スクローラー (ここではスクローラー 2) の値 (pageCountVar,pageIndexVar) は、表示されたデータテーブルの 1 ステップ後ろにあります。スクローラーは、以前の検索結果の変数を表示しています。
JSF2 の専門家ではないので、試してみてうまくいかなかったことがいくつかあります。 3. datascroller と datatable を同じ panelGroup の子として持っていた 4. すべての datascroller 変数に対して # の代わりに $ を試した 5. 'for=' 属性の値を完全に修飾した 6. commandButton を試した投稿をトリガーするための commandLink
Tomcat 7.0.47 で tomahawk21 1.1.14 + mojarra 2.1.6 を実行しています。
ここで何か助けていただければ幸いです。
<div id="my_datatable_div">
<div id="scroll2_div">
<h:panelGroup rendered="${!myData.hasRows}">No folders found.</h:panelGroup>
<t:dataScroller id="scroll_2"
for="my_datatable"
style="margin:auto;padding:0;border:10px solid #ff0000;"
rowsCountVar="rowsCount"
displayedRowsCountVar="displayedRowsCountVar"
firstRowIndexVar="firstRowIndex"
lastRowIndexVar="lastRowIndex"
pageCountVar="pageCount"
immediate="false"
pageIndexVar="pageIndex"
rendered="${myData.hasRows}"
>
<h:outputFormat value="Filtered :{0}, showing {1}: from {2} to {3}, Page {4}/{5}.">
<f:param value="#{rowsCount}" />
<f:param value="#{displayedRowsCountVar}" />
<f:param value="#{firstRowIndex}" />
<f:param value="#{lastRowIndex}" />
<f:param value="#{pageIndex}" />
<f:param value="#{pageCount}" />
</h:outputFormat>
</t:dataScroller>
</div>
<div id="scroll1_div">
<t:dataScroller id="scroll_1"
styleClass="scroller1Style"
paginatorTableStyle="scroll1PaginatorTableStyle"
paginatorColumnClass="scoller1PaginatorColumnClass"
paginatorActiveColumnClass="scroller1PaginatorActiveColumnClass"
for="my_datatable"
fastStep="10"
pageCountVar="pageCount"
pageIndexVar="pageIndex"
paginator="true"
paginatorMaxPages="9"
paginatorTableClass="paginator"
paginatorActiveColumnStyle="font-weight:bold;"
rendered="${myData.shouldShowPaginator}"
immediate="false">
<f:ajax execute="my_datatable scroll_2 scroll_1" render="my_datatable scroll_2 scroll_1 "/>
<f:facet name="first" >
<h:graphicImage style="border:0;margin-right:15px;" library="icons20121211" name="Beginning-16x16.png" />
</f:facet>
<f:facet name="last">
<h:graphicImage style="border:0;margin-right:0;" library="icons20121211" name="Last-16x16.png" />
</f:facet>
<f:facet name="previous">
<h:graphicImage style="border:0;margin-right:15px;" library="icons20121211" name="Previous-16x16.png" />
</f:facet>
<f:facet name="next">
<h:graphicImage style="border:0;margin-right:15px;margin-left:15px;" library="icons20121211" name="Next-16x16.png" />
</f:facet>
<f:facet name="fastforward">
<h:graphicImage style="border:0;margin-right:15px;" library="icons20121211" name="FastForward-16x16.png" />
</f:facet>
<f:facet name="fastrewind">
<h:graphicImage style="border:0;margin-right:15px;" library="icons20121211" name="FastRewind-16x16.png" />
</f:facet>
</t:dataScroller>
</div>
<t:dataTable id="my_datatable" forceId="true"
immediate="true"
styleClass="my_datatable_style"
headerClass="standardTable_Header"
footerClass="standardTable_Header"
rowClasses="standardTableRowClass"
rowOnMouseOver="this.style.backgroundColor='#FAFF67'"
rowOnMouseOut="this.style.backgroundColor='#F5F5F5'"
rowOnClick="this.style.backgroundColor='#FFE0E0'"
var="dataItem"
value="#{myData.list}"
first="#{myData.firstRowIndex}"
preserveDataModel="false"
rows="#{myData.rowCount}">
<t:column styleClass="${myData.columnStyleFor(dataItem)}">
.....
</t:column>
</t:dataTable>
</div>