如何从 Primefaces 6.2 中的数据 table 中将参数传递给模型 window?

How to pass arguments to modal window from within data table in Prime Faces 6.2?

我需要有一个 link 显示模态 window 当被推到数据 table 中的行值附近时,如下所示,但显然是我正确传递值的方式从数据 table 通过请求参数到模态 window 是错误的。所以我在 window 内收到空白区域。这是它的外观图片和代码示例(黄色三角形是 link):

<p:dataTable id="ticketList" value="#{tickets}" var="ticket">

        <p:column headerText="Статус экспорта">
            <h:outputText value="#{ticket.exportStatus.caption}"/>
            <p:commandLink id="ticketErrorShowlink"
                           action="ticketError"
                           oncomplete="PF('exportError').show();">
                <h:graphicImage url="/images/shim.gif" style="border:0; vertical-align:center" width="5"/>
                <h:graphicImage id="headImageHelp" url="/images/mess_warning.gif" title="Ошибки экспорта"
                                style="border:0; vertical-align:bottom"/>
                <f:param name="errorText" value="#{ticket.errors}"/>
            </p:commandLink>
        </p:column>
</p:dataTable>

<p:dialog id="ticketErrorModalPanel" header="Ошибки экспорта" widgetVar="exportError">
        <f:facet name="controls">
            <h:outputLink id="phidelink" value="#hide" onclick="PF('exportError').hide();">
                <h:graphicImage value="/images/close.png" style="border:0; cursor:pointer;"/>
            </h:outputLink>
        </f:facet>

        <p:panelGrid columns="1" columnsWidth="540px">
            <h:outputText value="#{requestParameters.errorText}" escape="false" />
        </p:panelGrid>
        <p:commandLink id="closeLink" oncomplete="PF('exportError').hide();" value="Закрыть" />
</p:dialog>

那么,从数据 table 传递参数或在标签中接收参数时,是否有任何规则可以遵循以解决此类问题?提前感谢您的回答。如果有需要,将添加任何其他信息。

您可以在对话框中为输出文本添加一个 id。

  <p:panelGrid columns="1" columnsWidth="540px">
        <h:outputText id="exportErrorText" value=" " escape="false" />
    </p:panelGrid>

然后在您的按钮中执行类似的操作

<p:commandLink id="ticketErrorShowlink"
                               action="ticketError"
                               oncomplete="document.getElementById('exportErrorText').innerHTML = '#{ticket.errors}'; PF('exportError').show();">

已解决:添加 <p:ajax> 将数据 table 的值设置为辅助 bean。

<h:form id="protocolForm">
  <p:dataTable id="ticketList" value="#{tickets}" var="ticket">
    <p:column headerText="Статус экспорта">
      <h:outputText value="#{ticket.exportStatus.caption}"/>
      <p:commandLink id="ticketErrorShowlink"
                     oncomplete="PF('exportError').show()">

         <h:graphicImage url="/images/shim.gif" style="border:0; vertical-align:center" width="5"/>
         <h:graphicImage id="headImageHelp" url="/images/mess_warning.gif" title="Ошибки экспорта"
                         style="border:0; vertical-align:bottom"/>
         <p:ajax listener="#{protocolForm.setErrors(ticket.errors)}" update=":protocolForm:ticketErrorPanelGroup"/>
      </p:commandLink>
   </p:column>
</p:dataTable>

// dialog down there

将模态 window 放入 <h:panelGroup>:

// data table
  <h:panelGroup id="ticketErrorPanelGroup">
    <p:dialog id="ticketErrorModalPanel" header="Ошибки экспорта" widgetVar="exportError">
        <f:facet name="controls">
            <h:outputLink id="phidelink" value="#hide" onclick="PF('exportError').hide();">
                <h:graphicImage value="/images/close.png" style="border:0; cursor:pointer;"/>
            </h:outputLink>
        </f:facet>

        <p:panelGrid columns="1" columnsWidth="540px">
            <h:outputText value="#{protocolForm.getErrors()}" escape="false" />
        </p:panelGrid>
        <p:commandLink id="closeLink" oncomplete="PF('exportError').hide()" value="Закрыть" />
    </p:dialog>
  </h:panelGroup>
</h:form>

此外,还有一个支持 bean - ProtocolForm 到 get/set 值(它由 Spring Web Flow 创建,因此没有 @MenadBean 注释)。

public class ProtocolForm { 
   private String errors;

   // getter/setter
}

设置查询完成后,window 打开获取值。