内部に a4j:commandLink を含む最小の rich:dataTable の例を次に示します。クリックすると、AJAX リクエストが Bean に送信され、dataTable が再レンダリングされます。
<rich:dataTable id="dataTable" value="#{carManager.all}" var="item">
<rich:column>
<f:facet name="header">name</f:facet>
<h:outputText value="#{item.name}" />
</rich:column>
<rich:column>
<f:facet name="header">action</f:facet>
<a4j:commandLink reRender="dataTable" value="Delete" action="#{carForm.delete}">
<f:setPropertyActionListener value="#{item.id}" target="#{carForm.id}" />
<f:param name="from" value="list" />
</a4j:commandLink>
</rich:column>
</rich:dataTable>
上記の例は、これまでのところ正常に動作します。しかし、テーブルに rich:subTable (ガレージごとに車をグループ化するなど) を追加すると、再レンダリングが失敗します...
<rich:dataTable id="dataTable" value="#{garageManager.all}" var="garage">
<f:facet name="header">
<rich:columnGroup>
<rich:column>name</rich:column>
<rich:column>action</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column colspan="2">
<h:outputText value="#{garage.name}" />
</rich:column>
<rich:subTable value="#{garage.cars}" var="car">
<rich:column><h:ouputText value="#{car.name}" /></rich:column>
<rich:column>
<a4j:commandLink reRender="dataTable" value="Delete" action="#{carForm.delete}">
<f:setPropertyActionListener value="#{item.id}" target="#{carForm.id}" />
<f:param name="from" value="list" />
</a4j:commandLink>
</rich:column>
</rich:column>
</rich:dataTable>
現在、rich:dataTable は再レンダリングされませんが、ページを手動で更新した後にアイテムが表示されないため、アイテムは削除されます。
ここで subTable が reRender-ing のサポートを壊すのはなぜですか?
タンク・トム