2013-08-22 3 views
5

Was ein Mai, um eine JSF-Seite nach dem Upload von Primefaces neu laden?Wie laden Sie die JSF-Seite nach dem Hochladen von Primefaces hoch?

Ich versuche, mit Javascript oncomplete="javascript:window.location.reload()", aber es funktioniert nicht:

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> 

Bean:

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!"); 
    } 
} 

Es gibt andere Möglichkeiten, das zu tun, ? ich ein <a4j:repeat>

+0

Uumm verwenden, versuchen Sie es ohne "javascript:". Es sollte in der Lage sein, ein Neuladen durchzuführen. ABER Sie haben wahrscheinlich das Problem, dass Sie die Seite mit der falschen URL neu laden. Wenn Sie nicht mit "faces-redirect = true" navigieren, wird Ihre URL immer um eine Seite zurückbleiben – noone

Antwort

2

<p:fileUpload /> hat ein update Attribut aktualisieren möchten, die, macht @form Wert gegeben, die ganze Form wieder.

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

Andernfalls, wenn Sie von Ajax-Funktionen loswerden wollen, haben Sie auch die basic fileUpload Komponente.

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

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

Versuchen Sie grundsätzlich nicht, was bereits getan ist!

0

Bitte versuchen

onsuccess="location.reload();" 

Es ist für mich ziemlich gut funktioniert zu verwenden. Ich verwende es, um meine Seite neu zu laden, nachdem ich auf Speichern geklickt habe, um die neue hochgeladene Datei zu sehen. Es würde nicht funktionieren, wenn Sie die Aktualisierung aller Formulare update="@(form)"

Verwandte Themen