JSF 从 commandLink/ajax 调用对话框

问题描述 投票:0回答:1

我可以使用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-

  1. 我知道对话框也可以从java代码内部调用。但我想这样做。
  2. 我尝试将
    process="@this" global="false"
    添加到 p:ajax,但这并没有改变行为/输出。
  3. 我不想将单击的行的值直接传递给对话框(如果可能的话)。当我单击
    commandlink
    时,首先应完成
    f:setPropertyActionListener & commandLink's
    操作方法。然后只应显示带有最新值的对话框。

对此的任何帮助/反馈都非常感谢:)

jsf primefaces dialog commandlink primefaces-datatable
1个回答
0
投票

从这个链接得到了解决方案- 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 的一部分。现在我才真正明白这意味着什么。干杯

© www.soinside.com 2019 - 2024. All rights reserved.