2013-02-14 4 views
5

Ich frage mich, ob es möglich ist, durch die primefaces im Voraus Modus laden nur mit dem Benutzer das Hochladen einer Datei zu begrenzen, zur Zeit habe ich:Primefaces laden, wie nur im Voraus Modus ein Upload ermöglichen

<p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}" 
            mode="advanced" 
            multiple="false" 
            update="messages" 
            sizeLimit="100000000" 
            allowTypes="/(\.|\/)(gif|jpe?g|png|doc|docx|txt|pdf)$/" 
            auto="false"/> 


        <p:growl id="messages" showDetail="true"/> 

Wie Sie sehen können, habe ich multiple = "false", aber ein Benutzer kann immer noch mehrere Dateien hochladen, irgendwelche Tipps?

EDIT:

   <p:fileUpload widgetVar="upload" fileUploadListener="#{fileUploadController.handleFileUpload}" 
           mode="advanced" 
           multiple="false" 
           update="messages" 
           label="Select File" 
           sizeLimit="100000000" 
           allowTypes="/(\.|\/)(gif|jpe?g|png|doc|docx|txt|pdf|html)$/" 
           auto="false"/> 


       <p:growl id="messages" showDetail="true"/> 

haben die widgetVar oben

und in meinem js hinzugefügt

<script type="text/javascript"> 
     function Naviagtion() 
     { 
      //alert("Sent to the printing holding queue, you may close this app now, your work will still print out "); 
      window.setTimeout(afterDelay, 500); 
      location.href = 'FilesUploaded.xhtml'; 

     } 

     upload.buttonBar.find('input[type=file]').change(function() { 
      if (this.value) { 
       var files = upload.uploadContent.find('.files tr'); 

       if (files.length > 1) { 
        files.get(0).remove(); 
       } 
      } 
     }); 
    </script> 

, aber ich bin noch in der Lage zu Multi-Upload, bin ich in der richtigen darüber gehen Richtung

Antwort

8

Die multiple="false" sagt nur den Webbrowser zu deaktivieren e mehrere Dateiauswahl im Browser-spezifischen Durchsuchen Dialog. Es verhindert jedoch in der Tat nicht, dass der Endbenutzer mehrmals auf die Schaltfläche klickt. Wählen Sie im Abschnitt PrimeFaces-Datei-Upload, um eine einzelne Datei mehrmals zu durchsuchen und hinzuzufügen.

Am besten bringen Sie JS/jQuery ein, um alle zuvor ausgewählten Dateien zu entfernen, wenn eine neue Datei ausgewählt wird. Vorausgesetzt, dass Sie Ihre <p:fileUpload> ein widgetVar="upload" gegeben haben, dann sollte dies tun:

$(document).ready(function() { 
    upload.buttonBar.find('input[type=file]').change(function() { 
     if (this.value) { 
      var files = upload.uploadContent.find('.files tr'); 

      if (files.length > 1) { 
       files.get(0).remove(); 
      } 
     } 
    }); 
}); 

Works für mich auf PrimeFaces 3.5.

+0

Vielen Dank verwendet! große Hilfe – user2065929

+0

Könnten Sie sich meinen Schnitt ansehen, gehe ich hier richtig vor? Danke – user2065929

+0

Der Variablenname 'upload' im JS-Codebeispiel wird durch das 'widgetVar'-Attribut der Komponente angegeben.In Ihrem speziellen Fall haben Sie ihm den Namen 'widgetVar' gegeben, daher sollten Sie' upload' im JS-Codebeispiel durch 'widgetVar' ersetzen (und beachten Sie die eingebaute JS-Konsole des Browsers, Sie hätten einen JS-Syntaxfehler bemerkt wie "Referenzfehler: WidgetVar ist nicht definiert"). – BalusC

10

Obwohl ein besseres Verhalten, es zu lösen sollte als @BalusC sein vorgeschlagen, aber in primefaces 4.0 Ich sehe das Attribut

fileLimit="1" 

, die Sie auf 1 können mehrere Datei Additionen mit „Wählen“ -Taste, um nicht zuzulassen. Wenn der Benutzer mehr Datei fügt dann einfach sagt

"Maximum number of files exceeded"

+0

guter Fang. Dies ist die richtige Lösung für Primefaces-Version von 4 oder höher. – yannicuLar

+0

In facefaces 5.x ist das FileLimit auch eine gute Wahl –

0

Wenn Sie Dateibegrenzung auf 1 gesetzt haben und einige Fehler passiert, während Datei geladen wird - Sie die Seite zu aktualisieren haben wieder Datei-Upload-Arbeit zu bekommen. Wenn Sie die Seite nicht aktualisieren, erhalten Sie eine Limit-Fehlermeldung.

Ich benutzte Lösung mit JS, wie in angenommener Antwort, aber muss Selektoren ändern, weil wigetWar für mich nicht funktionierte. i

Meiner Ansicht nach habe:

<p:fileUpload id="objectUpload"... /> 

In meinem Portlet Thema, Tisch mit Dateien hat eine CSS-Klasse von "ui-Fileupload-Dateien".

$(document).ready(function() { 
    $("div[id*='objectUpload']").find('input[type=file]').change(function() { 

    if (this.value) { 
     var files = $("div[id*='objectUpload']").find('.uifileupload-files tr');   
     if (files.length > 1) {  
      files.get(0).remove(); 
     } 
    } 
    }); 
}); 

Hoffe, dass es helps.I PrimeFaces 6.0

Verwandte Themen