这是一个最小的rich:dataTable示例,里面有一个a4j:commandLink。单击时,它会向我的bean发送一个AJAX请求并重新启动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>
exmaple obove 正常工作到目前为止。但是当我添加一个rich:subTable(例如将汽车按车库分组)到表时,reRendering失败了...
<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>
现在富:dataTable 未被重新呈现但该项目被删除,因为该项目在手动页面刷新后没有显示。
为什么subTable在这里打破了对reRender的支持?
坦克汤姆答案 0 :(得分:1)
事实证明,Hibernate没有更新相关模型的列表。
使用AppFuse的carManager移除汽车后,删除的汽车仍显示在getCars() - 相关车库的列表中[使用garageManager.getAll()接收车库时)。
所以问题不是与richfaces本身有关!
目前我正在使用一种解决方法(从相关模型oO接收数据时手动删除项目)但是我可能会打开一个新问题来解决这个问题。