我想根据通过primeface中的fileuploader上传的文件显示x号的message / growl。
目前,它只会显示最新消息。其余部分将不会显示。无论如何,节目最后可以绕过吗?或另一种选择?
所以如果我上传4个文件。无论成功与否,我希望它能显示4条消息。每个文件1个。
的index.xhtml:
<h:form id="form">
<p:messages id="messages" autoUpdate="true" showDetail="true" closable="true" />
<p:fileUpload fileUploadListener="#{fileUploadAction.upload}"
mode="advanced" allowTypes="/(\.|\/)(asc)$/" dragDropSupport="true" update="messages" />
</h:form>
FileUploadAction.java:
public void upload(FileUploadEvent event)
{
String filename = event.getFile().getFileName();
try
{
copyFile(filename, event.getFile().getInputstream());
FacesContext.getCurrentInstance().addMessage(filename, new FacesMessage(FacesMessage.SEVERITY_INFO, "msg.header", filename + " is uploaded."));
}
catch (IOException e)
{
FacesContext.getCurrentInstance().addMessage(filename, new FacesMessage(FacesMessage.SEVERITY_ERROR, "err.header", e.getLocalizedMessage()));
}
}
public void copyFile(String fileName, InputStream in)
{
try
{
// write the inputStream to a FileOutputStream
OutputStream out = new FileOutputStream(new File(PropertiesUtil.LOCAL_PATH + fileName));
int read = 0;
byte[] bytes = new byte[1024];
while ((read = in.read(bytes)) != -1)
{
out.write(bytes, 0, read);
}
in.close();
out.flush();
out.close();
}
catch (IOException e)
{
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "err.header", e.getLocalizedMessage()));
}
}
答案 0 :(得分:1)
由于fileUpload正在更新每个文件上传的消息或咆哮,因此正在从DOM中清除以前的消息,尤其是在快速提供请求的情况下。
为了保持咆哮声不变,并显示多条消息,您可以执行以下操作:
首先是咆哮组件:
<p:growl widgetVar="growlWV" showDetail="true" />
确保定义widgetVar,稍后将使用它。
文件上传:
<p:fileUpload fileUploadListener="#{fileUploadAction.upload}"
mode="advanced" allowTypes="/(\.|\/)(asc)$/" dragDropSupport="true" />
确保您没有更新fileUpload中的咆哮。
上传处理方法中的第二个:
RequestContext.getCurrentInstance().execute("PF('growlWV').renderMessage("
+ "{\"summary\":\"summary goes here\""
+ ", \"detail\":\"" + event.getFile().getFileName() + "\""
+ ", \"severity\":\"warn\"})");
你可以用一个不那么混乱的语法来定义自己的js函数,然后在执行中调用上面的js而不是所有这些+ \来更整洁,但我猜你有了这个想法。