如何从Prime Faces 6.2的数据表中将参数传递给模态窗口?

时间:2018-08-19 09:29:42

标签: primefaces jsf-2

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

已解决:添加了<p:ajax>,该值将数据表中的值设置为备用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

将模式窗口放入<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来获取/设置值(它是由Spring Web Flow创建的,因此没有@MenagedBean批注)。

public class ProtocolForm { 
   private String errors;

   // getter/setter
}

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