我需要您的帮助才能在对话框中显示错误消息。通过单击commandButton,对话框中不会显示任何消息。
即使我试图在对话框中显示消息,但没有显示任何错误。
那么如何在对话框中而不是在主窗体中生成消息
这是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();
}
}
答案 0 :(得分:0)
这是因为你在commandButton上有ajax=false
,所以属性update::Requests:messagePDFSTAR
不起作用。
您无法合并ajax=false
和update="..."
,更新属性仅适用于ajax操作。
我知道您需要ajax=false
因为p:fileDownload
适用于此,但也许您可以尝试其他方式来显示所需的信息。
我处理这种情况并使用解决方法,在p:dialog
您可以使用p:messages
和autoUpdate=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);
它在新对话框中显示消息,但我认为这不是您想要的。您希望在commandButton
和fileDownLoad
。
答案 1 :(得分:0)
要在下载后将组件更新为 p:growl 或 p:messages,甚至在开始时只需使用 p:remoteCommand 和 PrimeFaces.monitorDownload(start, stop);
,如此处提供的示例所示 Primefaces File Download example
这是我的做法:
<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.0.0 并在下载按钮上使用 ajax