我可以使用ajax从
dialog
调用commandlink
(存在于dataTable
内)。
要求-我单击的行(
commandlink
),对话框应显示单击的行的值。
Issue-
f:setPropertyActionListener & commandLink's
操作方法在 dialog
显示后调用。这会导致旧数据显示在对话框中。我所说的旧数据是指之前点击的数据。
问题- 如何仅在
dialog
操作方法完成执行后调用 f:setPropertyActionListener & commandLink's
?
代码-
<h:form id="form">
<p:outputPanel id="OPPanel">
<p:panel header="Panel Display">
<p:dataTable value="#{myBean.myDataList}" var="emp">
<p:column headerText="myData1">
<h:outputText value="#{emp.myData1}"/>
</p:column>
<p:column headerText="myData2">
<p:commandLink action="#{myActionClass.customizeData}" immediate="true">
<f:setPropertyActionListener value="#{emp.myData1}"
target="#{myBean.myData1Str}" />
<p:ajax event="click" update=":form:OPDialog"
oncomplete="PF('opDialogVar').show()"/>
<h:outputText value="#{emp.myData2}"/>
</p:commandLink>
</p:column>
</p:dataTable>
</p:panel>
</p:outputPanel>
<p:dialog header="Custom Dialog Display" widgetVar="opDialogVar" modal="true" showEffect="fade"
hideEffect="fade" resizable="false">
<p:outputPanel id="OPDialog" style="text-align:center;">
<p:panelGrid columns="2"
columnClasses="label,value">
<h:outputText value="Customized Data:"/>
<h:outputText value="#{myBean.myData1Str}"/>
</p:panelGrid>
</p:outputPanel>
</p:dialog>
</h:form>
P.S-
process="@this" global="false"
添加到 p:ajax,但这并没有改变行为/输出。commandlink
时,首先应完成 f:setPropertyActionListener & commandLink's
操作方法。然后只应显示带有最新值的对话框。对此的任何帮助/反馈都非常感谢:)
从这个链接得到了解决方案- Primefaces 的 commandLink 仅适用于数据表的第一页
在我的上下文中修改解决方案,下面是我的工作代码-
<p:column headerText="myData2">
<p:commandLink
action="#{myActionClass.customizeData}"
oncomplete="PF('opDialogVar').show()"
update=":form:OPDialog"
immediate="true" process="@this">
<f:setPropertyActionListener value="#{emp.myData1}"
target="#{myBean.myData1Str}" />
<h:outputText value="#{emp.myData2}"/>
</p:commandLink>
</p:column>
我在某处读到,ajax 是 commandlink 的一部分。现在我才真正明白这意味着什么。干杯