1

这是一个最小的 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 会在此处中断对重新渲染的支持?

坦克汤姆

4

1 回答 1

1

原来,Hibernate 并没有更新相关模型的列表。

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

所以这个问题与richfaces本身无关

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

于 2010-04-29T13:57:37.467 回答