【问题标题】:How to pass arguments to modal window from within data table in Prime Faces 6.2?如何从 Primefaces 6.2 的数据表中将参数传递给模态窗口?
【发布时间】:2018-08-19 09:29:41
【问题描述】:

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

<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>

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

【问题讨论】:

  • 也许您可以在对话框中执行 &lt;h:outputText value="#{ticket.errors}"/&gt; 并在 &lt;commandLink 中执行 update="ticketErrorModalPanel"
  • 我试过但不幸的是它给出了相同的结果
  • 可以在p:commandLink里面使用f:setPropertyActionListener来设置参数,会在p:dialog中显示
  • 您能否阐明它应该如何工作,因为表格中有不止一行带有指向模式窗口的链接?例如,我可以在支持 bean 中创建所有错误文本的列表。但是我将如何确定应该附加到哪个列表项?
  • 所以你确实让它在 PrimeFaces 6.1 中工作?并检查 PrimeFaces 展示。里面的例子

标签: primefaces jsf-2


【解决方案1】:

您可以在对话框中的输出文本中添加一个 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();">

【讨论】:

  • 然后也许你不需要命令链接,只需在图片上加上 onclick="....",与 oncomplete 的内容相同
【解决方案2】:

已解决:添加了 &lt;p:ajax&gt;,它将数据表中的值设置为支持 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

把模态窗口放到&lt;h:panelGroup&gt;:

// 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 来获取/设置值(它由 Spring Web Flow 创建,因此没有 @MenagedBean 注释)。

public class ProtocolForm { 
   private String errors;

   // getter/setter
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 2018-07-30
    相关资源
    最近更新 更多