2013-02-14 13 views
5

Tôi tự hỏi nếu nó có thể, bằng cách sử dụng các primefaces tải lên trong chế độ trước để hạn chế người dùng tải lên một tập tin duy nhất, hiện nay tôi có:Primefaces tải lên, làm thế nào để chỉ cho phép một tải lên trong chế độ trước

<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"/> 

như bạn có thể thấy tôi có muliple = "false" nhưng người dùng vẫn có thể tải lên nhiều tệp, bất kỳ mẹo nào?

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"/> 

đã thêm widgetVar trên

và trong js của tôi

<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> 

nhưng tôi vẫn có thể đa tải lên, am i đi về việc này ở bên phải hướng

Trả lời

8

multiple="false" chỉ yêu cầu trình duyệt web biến mất e nhiều lựa chọn tệp trong hộp thoại Duyệt theo số cụ thể của trình duyệt. Tuy nhiên, nó thực sự không ngăn người dùng cuối nhấp vào nhiều lần trên Chọn nút của phần tải lên tệp PrimeFaces để duyệt và thêm một tệp nhiều lần.

Đặt cược tốt nhất của bạn là đưa vào một số JS/jQuery để xóa tất cả các tệp đã chọn trước đó khi tệp mới được chọn. Với điều kiện là bạn đã cho <p:fileUpload> bạn một widgetVar="upload", thì đây nên làm:

$(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(); 
      } 
     } 
    }); 
}); 

trình cho tôi trên PrimeFaces 3.5.

+0

Cảm ơn rất nhiều! Trợ giúp tuyệt vời – user2065929

+0

Bạn có thể xem bản chỉnh sửa của tôi không, tôi có đang đi đúng hướng không? Cảm ơn – user2065929

+0

Tên biến 'upload' trong ví dụ mã JS được xác định bởi thuộc tính' widgetVar' của thành phần.Trong trường hợp cụ thể của bạn, bạn đã đặt tên cho nó là 'widgetVar', vì vậy bạn nên thay thế' upload' trong ví dụ mã JS bằng 'widgetVar' (và chú ý đến giao diện điều khiển JS dựng sẵn của trình duyệt, bạn đã nhận thấy lỗi cú pháp JS như "lỗi tham chiếu: widgetVar không được xác định"). – BalusC

10

Mặc dù hành vi tốt hơn để giải quyết nó nên càng @BalusC đề nghị, nhưng trong primefaces 4,0 Tôi nhìn thấy những thuộc tính

fileLimit="1" 

mà bạn có thể thiết lập để 1 để không cho phép nhiều tập tin bổ sung sử dụng "Chọn" nút. Khi người dùng thêm tệp khác thì nó chỉ đơn giản là nói

"Maximum number of files exceeded"

+0

đánh bắt tốt. Đây là giải pháp phù hợp cho phiên bản Primefaces 4 hoặc cao hơn. – yannicuLar

+0

Trong thủ tục 5.x, tệpLimit cũng là một lựa chọn tốt –

0

Nếu bạn có giới hạn tập tin được đặt thành 1 và một số lỗi xảy ra trong khi đang tải - bạn phải làm mới trang để tải lại tệp lên. Nếu bạn không làm mới trang, bạn sẽ nhận được thông báo lỗi giới hạn.

Tôi đã sử dụng giải pháp với JS, như trong câu trả lời được chấp nhận, nhưng phải thay đổi bộ chọn, bởi vì wigetWar không hoạt động cho tôi.

Theo quan điểm của tôi, tôi có:

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

Trong chủ đề portlet của tôi, bàn với các tập tin có một lớp css của "ui-FileUpload-files".

$(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(); 
     } 
    } 
    }); 
}); 

Hy vọng nó helps.I sử dụng PrimeFaces 6.0