Jsf 素数面更新

Jsf 素数面更新,jsf,primefaces,Jsf,Primefaces,我有一个具有以下定义的数据表: <h:form prependId="false"> <p:dataTable id="instancesTable" lazy="false" paginator="false" var="instance" value="#{panaceaController.instances}"> <p:column>

我有一个具有以下定义的数据表:

   <h:form prependId="false">
        <p:dataTable id="instancesTable" lazy="false" paginator="false" var="instance"
                     value="#{panaceaController.instances}">
            <p:column>
                <f:facet name="header">
                    <h:outputText value="Directory"/>
                </f:facet>

                <p:commandLink value="#{instance.directory}" target = "instance.jsf">
                    <f:setPropertyActionListener value="#{instance}" target="#{panaceaController.instance}"/>
                </p:commandLink>
            </p:column>
             <p:column>
                <f:facet name="header">
                    <h:outputText value="Running"/>
                </f:facet>
                <h:outputText value="#{instance.running}"/>
            </p:column>
            <p:column>
                <f:facet name="header">
                    Options
                </f:facet>
                <p:commandLink id="properties_link" async="true" update="propertiesTable" oncomplete="propertiesDialog.show();">
                    <h:graphicImage value="img/properties.png" />
                    <f:setPropertyActionListener value="#{instance}" target="#{panaceaController.instance}"/>
                </p:commandLink>
                <p:tooltip for="properties_link" value="Edit Properties" showEffect="fade" hideEffect="fade" />

                <p:commandLink id="delete" async="true"  onclick="confirmDelete.show();" >
                    <h:graphicImage value="img/edit-delete.png"/>
                    <f:setPropertyActionListener value="#{instance}" target="#{panaceaController.instance}"/>
                </p:commandLink>
                <p:tooltip for="delete" value="Delete This Instance" showEffect="fade" hideEffect="fade" />


                <h:panelGroup rendered="#{!instance.running}">
                <p:commandLink id="start" async="true" action="#{panaceaController.start}" update="messages instancesTable">
                    <h:graphicImage value="img/start.png"/>
                    <f:setPropertyActionListener value="#{instance}" target="#{panaceaController.instance}"/>
                </p:commandLink>
                <p:tooltip for="start" value="Start Instance" showEffect="fade" hideEffect="fade" />
                </h:panelGroup>

                <h:panelGroup rendered="#{instance.running}">
                <p:commandLink id="stop" async="true" action="#{panaceaController.stop}" update="messages instancesTable">
                    <h:graphicImage value="img/stop.png"/>
                    <f:setPropertyActionListener value="#{instance}" target="#{panaceaController.instance}"/>
                </p:commandLink>
                <p:tooltip for="stop" value="Stop Instance" showEffect="fade" hideEffect="fade" />
                </h:panelGroup>
                  <p:commandLink id="probe" async="true" action="#{panaceaController.probe}" update="messages instancesTable">
                    <h:graphicImage value="img/probe.png"/>
                    <f:setPropertyActionListener value="#{instance}" target="#{panaceaController.instance}"/>
                </p:commandLink>
                <p:tooltip for="probe" value="Probe if instance is running" showEffect="fade" hideEffect="fade" />

            </p:column>

        </p:dataTable>
      </h:form>

选择权
delete命令链接更新表OK,但是其他命令根本不更新“instancesTable”,即使它们正确地更新了“messages”。我使用的是primefaces 3.0M3


有人能帮我一下吗?

在数据表组件内触发的操作中,有许多与数据表组件的AJAX更新相关的bug。其中大部分应该在最新的Primefaces版本3中修复,但是您没有真正说明正在使用哪个版本的Primefaces


我在一个网站上发布了一个解决方案。基本上,您可以从客户端调用javascript来手动调用dataTable外部隐藏按钮上的单击事件。

我认为您可以尝试使用outputpanel来包围dataTable,并为outputpanel提供一个styleClass(此styleClass仅用于更新),然后按样式类更新outputpanel,如下所示:
update=“@(.yourPanelStyleClass)”
。在我的情况下,它工作得很好,但我不确定它是否适合您。

只需在命令按钮中提供您要更新的组件的ID即可
update=“instancesTable”

我使用的是3.0M3。我将查看您的解决方案,并尝试升级到M4。