2017-06-22 94 views
0

我想根据通过primeup中的fileuploader上传的文件显示x个消息/ growl。为PrimeFaces显示fileupload的多个消息/咆哮消息

目前,它只会显示最新的消息。其余的将不会显示。无论如何,最后的节目可以绕过吗?或另一种选择?

所以,如果我上传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

你的意思表示具有比一个消息的更多,当您上传您的文件?!? –

+0

@YagamiLight是的。就像我上传4个文件和4个文件成功。我将显示4条消息。 1为每个文件。 – shadow

+0

首先,如果您想制作多个上传文件,请在阅读完[Primefaces Upload Multiple File Example](https://www.primefaces.org/showcase/ui/file/upload/multiple.xhtml)后告诉我如果问题仍然存在 –

回答

1

由于文件上传正在更新消息或每个文件上传咆哮,前一消息被从DOM清除特别是如果请求得到快速服务。

为了保持咆哮完好,并显示多个消息可能会执行以下操作:

首先咆哮组件:

<p:growl widgetVar="growlWV" showDetail="true" /> 

确保您定义的widgetVar,以后将使用它。

文件上传:

<p:fileUpload fileUploadListener="#{fileUploadAction.upload}" 
     mode="advanced" allowTypes="/(\.|\/)(asc)$/" dragDropSupport="true" /> 

确保你没有更新的文件上传的咆哮。

二在上传处理方法:

RequestContext.getCurrentInstance().execute("PF('growlWV').renderMessage(" 
      + "{\"summary\":\"summary goes here\"" 
      + ", \"detail\":\"" + event.getFile().getFileName() + "\"" 
      + ", \"severity\":\"warn\"})"); 

您可以用低凌乱的语法定义自己的js函数,更整洁然后调用上述的js代替所有这些+ \在执行,但我想你明白了。


相关问题: Show growl using Javascript