2012-10-22 19 views
6

Tôi có yêu cầu tải tệp lên máy chủ từ ứng dụng web được viết bằng GWT. Phần phức tạp là hộp thoại FileUpload không thể bị dislayed (do vấn đề crunch không gian trên TabPanel). Vì vậy, trên nhấp chuột vào một nút, tôi cần phải:GWT - tải tệp lên máy chủ mà không cần sử dụng hộp thoại Tải lên Tệp tin

  • Mở tập tin lựa chọn trực tiếp, mà không làm phiền người sử dụng với một Form thêm chứa một UploadItem bấm
  • Bắt đầu tải lên ngay lập tức sau khi lựa chọn tập tin

tôi đã viết code sau trong GWT để mở tập tin hộp thoại chọn trên nhấp chuột nút:

final FileUpload upload = new FileUpload(); 

upload.setVisible(false); 
upload.setName("uploadFormElement"); 
panel.add(upload); 

panel.add(new Button("Select File", new ClickListener() 
{ public void onClick(Widget pSender) 
{ 
    jsClickUpload(upload.getElement()); 
    MessageBox.showMessage("selected filename: " + upload.getFilename()); 
} 
})); 

native void jsClickUpload(Element pElement) /*-{ pElement.click(); }-*/; 

Mặc dù điều này không mở file chọn hộp thoại trên nút bấm, nó đồng thời cũng hiển thị hộp thông báo với giá trị trống cho tên tệp.

Vì vậy, những gì tôi cần là chỉ sau khi tệp được chọn, hộp thông báo được hiển thị. Tôi có thể làm cái này như thế nào? Ngoài ra, làm thế nào để tải lên các tập tin thực tế để máy chủ sau này (M

Trả lời

8

Dưới đây là một ví dụ làm việc:

public void onModuleLoad() { 
    final FileUpload upload = new FileUpload(); 

    upload.setVisible(false); 
    upload.setName("uploadFormElement"); 
    RootPanel.get().add(upload); 

    Button b = new Button("Select File"); 
    b.addClickHandler(new ClickHandler() { 
     @Override 
     public void onClick(ClickEvent event) { 
      jsClickUpload(upload.getElement()); 
     } 
    }); 

    upload.addChangeHandler(new ChangeHandler() { 

     @Override 
     public void onChange(ChangeEvent event) { 
      Window.alert(upload.getFilename()); 
     }}); 

    RootPanel.get().add(b); 
} 

native void jsClickUpload(Element pElement) /*-{ 
    pElement.click(); 
}-*/; 

Để tải lên nó, bạn cần có một Servlet nhận được upload tôi sử dụng thư viện bổ sung này:. http://code.google.com/p/gwtupload/ Bạn tìm thấy tất cả các mã cần thiết trên trang web của họ

+0

Không, nó không hoạt động Tôi không thể thấy MessageBox sau khi tệp được chọn. Những gì tôi cần là CHỈ sau khi tệp được chọn, tải lên thực tế sẽ nhận được được kích hoạt (MessageBox chỉ là một chủ sở hữu plaace để thử nghiệm, nó sẽ được thay thế bằng mã tải lên servlet thực tế) –

+0

Tôi thay thế d câu trả lời với một ví dụ làm việc. Mã này chạy hoàn toàn tốt cho tôi bằng cách sử dụng GWT 2.4.0 – newnoise

+0

thực sự đánh giá cao sự trợ giúp của bạn tuy nhiên, nó không làm việc cho tôi. Tôi không thể nhìn thấy Window.alert. Tôi đang sử dụng GWT 2.3.0 và tôi đang thử nghiệm tương tự trong trình duyệt FF (phiên bản mới nhất), nhưng tôi không nghĩ rằng nên quan trọng nhiều. –

Các vấn đề liên quan