如何在对话框中显示消息



我需要您的帮助在对话框中显示错误消息。通过单击命令按钮,对话框中不会显示任何消息。

尽管我试图在对话框中显示消息,但没有显示任何错误。

那么我如何在对话框中而不是在主表单中生成消息

以下是JSF页面代码:
<h:form id="Requests">
    <p:messages id="messages" showDetail="true" autoUpdate="true" closable="true"/>
    <p:dialog id="c1" header="C1" widgetVar="c1">
        <p:message id="messagePDFSTAR"
                   for=":Requests:DownloadPDFSTAR"
                   showDetail="true" />
        <p:commandButton id="DownloadPDFSTAR"
                         value="Download"
                         ajax="false"
                         actionListener="#{hrd.PDFSTAR}"
                         update=":Requests:messagePDFSTAR" >
            <p:fileDownload value="#{hrd.fileSTAR}" />
        </p:commandButton>
    </p:dialog>
</h:form>

下面是java bean代码:

public void PDFSTAR() {
    try {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Ref is Null", "Ref is Null");
        RequestContext.getCurrentInstance().showMessageInDialog(message);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Fatal!", "System Error"));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

这是因为您在命令按钮处有ajax=false,所以,属性update::Requests:messagePDFSTAR不起作用。你不能结合ajax=falseupdate="...",更新属性只适用于ajax操作。

我知道你需要ajax=false,因为p:fileDownload与之合作,但也许你可以尝试另一种方式来显示你想要的消息。

我处理这种情况一次,并使用一个解决方案,在p:dialog中,你可以使用p:messagesautoUpdate=true

<h:form id="Requests">
    <p:messages id="messages" showDetail="true" autoUpdate="true" closable="true"/>
    <p:dialog id="c1" header="C1" widgetVar="c1">
        <p:messages id="messagesPDFSTAR"
                    autoUpdate="true"
                   showDetail="true" />
        <p:commandButton id="DownloadPDFSTAR"
                         value="Download"
                         ajax="false"
                         actionListener="#{hrd.PDFSTAR}" >
            <p:fileDownload value="#{hrd.fileSTAR}" />
        </p:commandButton>
    </p:dialog>
</h:form>
我希望这对你有帮助。编辑:

RequestContext.getCurrentInstance().showMessageInDialog(message);

它在一个新的对话框中显示消息,但我认为这不是你想要的。您希望在commandButtonfileDownLoad的相同对话框中显示消息。

Ajax和更新不能正常工作

要在下载后将组件更新为p:growlp:messages,甚至在开始时仅使用p:remoteCommandPrimeFaces.monitorDownload(start, stop);,如这里提供的示例所示

我是这样做的:

<script type="text/javascript">
    function start() {
        PF('statusDialog').show();
        //maybe some other blah blah..
        updateMyMessages();
    }
    function stop() {
        PF('statusDialog').hide();
        //maybe some other blah blah..
        updateMyMessages();
    }
</script>
<div class="card">
    <p:dialog modal="true" widgetVar="statusDialog" header="Status" draggable="false" closable="false"
              resizable="false">
              <i class="pi pi-spinner pi-spin" style="font-size:3rem"></i>
    </p:dialog>
    <h:form>
        <p:messages id="messagesPDFSTAR"/>
        <p:remoteCommand name="updateMyMessages" update="messagesPDFSTAR" action="#{hrd.PDFSTAR}"/>
        <p:commandButton value="Download" ajax="false" onclick="PrimeFaces.monitorDownload(start, stop);"
                         icon="pi pi-arrow-down" styleClass="p-mr-2">
            <p:fileDownload value="#{fileDownloadView.file}"/>
        </p:commandButton>
</div>

请注意,我调用了远程命令两次,所以你得到两个更新你的消息,这也将执行你的动作#{hrd.PDFSTAR}两次,一次在下载开始,另一次在下载完成,所以修改你认为合适。

你可以随时升级到PrimeFaces 10+,并在下载命令按钮上使用ajax="true"(默认)。

相关内容

  • 没有找到相关文章

最新更新