2017-06-22 12 views
0

primefaceでファイルアップロードを介してアップロードされたファイルに基づいて、x個のmessage/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

するFileUploadは、各ファイルのアップロードにメッセージやうなり声を更新しているので、前のメッセージはDOMからクリアされています特に要求が高速に処理されている場合

まずグロウルコンポーネント:

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

あなたが後でそれを使用します、widgetVarを定義することを確認し、完全なうなり声を維持し、あなたが次の操作を行うことが複数のメッセージを表示するには

するFileUpload:

<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

関連する問題