【问题标题】:Why does a subTable break a4j:commandLink's reRender?为什么 subTable 会破坏 a4j:commandLink 的重新渲染?
【发布时间】: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


【解决方案1】:

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

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

所以问题与richfaces本身有关!

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

【讨论】:

    猜你喜欢
    • 2011-04-25
    • 2016-06-17
    • 1970-01-01
    • 2011-01-20
    • 2021-06-15
    • 2013-06-02
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    相关资源
    最近更新 更多