来自 commandLink/ajax 的 JSF 调用对话框

JSF invoke dialog from commandLink/ajax

提问人:satya prakash Panigrahi 提问时间:11/1/2023 最后编辑:Jasper de Vriessatya prakash Panigrahi 更新时间:11/1/2023 访问量:57

问:

我能够使用 ajax(存在于 .dialogcommandlinkdataTable

要求 - 我单击的 row() 对话框应显示单击的行的值commandlink

Issue- 操作方法在显示后调用。这会导致旧数据显示在对话框中。我所说的旧数据是指来自上次点击的数据。f:setPropertyActionListener & commandLink'sdialog

问题 - 只有在操作方法执行完毕后,我才调用 ?dialogf: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>

Attaching a sample picture

附言-

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

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

JSF 对话框 命令链接 primefaces-datatable

评论


答:

0赞 satya prakash Panigrahi 11/1/2023 #1

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