为什么subTable打破了a4j:commandLink的reRender?

时间:2010-04-22 10:01:38

标签: jsf richfaces jsf-2 ajax4jsf

这是一个最小的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的支持?

坦克汤姆

1 个答案:

答案 0 :(得分:1)

事实证明,Hibernate没有更新相关模型的列表。

使用AppFuse的carManager移除汽车后,删除的汽车仍显示在getCars() - 相关车库的列表中[使用garageManager.getAll()接收车库时)。

所以问题不是与richfaces本身有关!

目前我正在使用一种解决方法(从相关模型oO接收数据时手动删除项目)但是我可能会打开一个新问题来解决这个问题。