【发布时间】:2011-02-10 23:59:43
【问题描述】:
这是一个最小的 rich:dataTable 示例,其中包含 a4j:commandLink。单击时,它会向我的 bean 发送 AJAX 请求并重新呈现数据表。
<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 会在此处中断对重新渲染的支持?
坦克汤姆
【问题讨论】:
-
可能是一个错误。检查 Firefox 中的 Javascript 控制台
-
检查过了。响应在这两种情况下都是一个表(w/ 和 w/o subTable),但是对于 subTable,它似乎再次发送旧表。可能是某种缓存问题。无论如何,Firefox 中都禁用了缓存。
标签: jsf richfaces jsf-2 ajax4jsf