我有一个数据库,其定义如下:
<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 commandLink更新表OK,但其他命令只是不更新“instancesTable”,即使它们正确更新了“messages”。我正在使用primefaces 3.0M3
有人可以帮帮我吗?
答案 0 :(得分:1)
对于dataTable组件中的动作触发的dataTable组件的AJAX更新,存在许多错误。其中大部分都应该在最新的Primefaces第3版中修复,但是你并没有真正说明你正在使用哪种版本的Primefaces。
我在previous answer here发布了一个解决方法。从本质上讲,您可以从客户端调用javascript来手动调用dataTable外部隐藏按钮的click事件。
答案 1 :(得分:0)
我认为您可以尝试使用outputpanel包围dataTable,并为outputpanel提供styleClass(此styleClass仅用于更新。),然后通过styleClass更新outputpanel,如下所示:update="@(.yourPanelStyleClass)"
。它适用于我的情况,但我不确定它是否适合你。
答案 2 :(得分:0)
只需在命令按钮中提供要更新的组件的ID即可 更新= “instancesTable”