2013-08-22 27 views
5

primefacesのアップロード後にjsfページをリロードするにはどうすればよいですか?primefacesのアップロード後にjsfページをリロードする方法は?

私はjavascriptのoncomplete="javascript:window.location.reload()"と試みるが、それは動作しませんです。

XHTML:

<h:form> 
    <p:messages showDetail="true"/> 
    <p:fileUpload fileUploadListener="#{revistauploadBean.upload}" 
        mode="advanced" dragDropSupport="false" merge="true" 
        uploadLabel="Enviar" cancelLabel="Cancelar" 
        oncomplete="javascript:window.location.reload()" 
        label="Procurar PDF" sizeLimit="1000000000" fileLimit="3" 
        allowTypes="/(\.|\/)(pdf)$/" /> 
</h:form> 

豆:

public void upload(FileUploadEvent event) throws SQLException { 
    LoginAuthentication user = new LoginAuthentication(); 
    FacesMessage msg = new FacesMessage("Success! ", event.getFile().getFileName() 
     + " is uploaded."); 
    FacesContext.getCurrentInstance().addMessage(null, msg); 
    // Do what you want with the file   
    try { 
     copyFile(event.getFile().getFileName(), event.getFile().getInputstream()); 
     ConectaBanco mysql = new ConectaBanco(); 
     mysql.insere("INSERT INTO edicoes VALUES (NULL, '" 
      + mysql.pegaIDrev(user.getNome()) 
      + "', NULL, NULL, NULL, NULL, '" 
      + event.getFile().getFileName() 
      + "');"); 
     File pasta = new File(caminhoPastaPDF 
      + "/convertidos/" 
      + event.getFile().getFileName()); 
     pasta.mkdir(); 
     convertePdf(event.getFile().getFileName()); 
     FacesMessage msg1 = new FacesMessage("Succesful", event.getFile().getFileName() 
      + " is uploaded."); 
     FacesContext.getCurrentInstance().addMessage(null, msg1); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

public void copyFile(String fileName, InputStream in) { 
    try { 
     // write the inputStream to a FileOutputStream 
     OutputStream out = new FileOutputStream(new File(destination + 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(); 
     ////System.out.println("New file created!"); 
    } 
} 

ことを行う別の方法があります。 ?私は<a4j:repeat>

+0

uumm、「javascript:」を付けずに試してみてください。リロードを実行できるはずです。しかし、間違ったURLでページを再読み込みするという問題が発生する可能性があります。 ?faces-redirect = trueでナビゲートしないと、URLは常に1ページ遅れる – noone

答えて

2

<p:fileUpload />をリフレッシュしたい は再びフォーム全体をレンダリングし、@form値与えられ、update属性を持っています。

<p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}" 
    mode="advanced" dragDropSupport="false" 
    update="@form" sizeLimit="100000" fileLimit="3" 
    allowTypes="/(\.|\/)(gif|jpe?g|png)$/" /> 

あなたは、AJAX機能を取り除きたい場合はそうでない場合、あなたはまた、basic fileUploadコンポーネントを持っています。

<p:fileUpload value="#{fileUploadController.file}" mode="simple"/> 

<p:commandButton value="Submit" ajax="false" 
      actionListener="#{fileUploadController.upload}"/> 

基本的に、既に行われていることをjavascriptで試してみませんか?

0

は、それはかなりよく私の作品

onsuccess="location.reload();" 

使用してみてください。私は新しいアップロードされたファイルを見るために保存ボタンを押すと私のページをリロードするためにそれを使用しています。すべてのフォームの更新を使用すると機能しません update="@(form)"

関連する問題