2012-11-20 37 views
8

Tôi đang sử dụng PrimeFaces 3.1.2, NetBeans 7.2, JSF 2.1 và GlassFish 3.1.2.FileDownload và FileUpload JSF Primefaces không hoạt động

Tôi đang sử dụng mã thực tế tôi nhận được từ http://www.primefaces.org/showcase/ui/fileUploadAuto.jsfhttp://www.primefaces.org/showcase/ui/fileDownload.jsf.

Khi tôi chạy mã tải lên tệp, nó không hoạt động chút nào. Tệp không được tải lên và không hiển thị thông báo thành công. Nhưng nếu kích thước tệp vượt quá kích thước được đề cập, nó sẽ hiển thị thông báo rằng kích thước tệp quá lớn.

Đây là quan điểm của tôi:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui"> 
    <h:head> 
    </h:head> 
    <h:body> 
     <h:form enctype="multipart/form-data"> 
      <p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}" 
       mode="advanced" 
       update="messages" 
       auto="true" 
       sizeLimit="100000" 
       allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/> 
      <p:growl id="messages" showDetail="true"/> 
     </h:form> 
    </h:body> 
</html> 

Đây là đậu ủng hộ tôi:

package com; 

import javax.faces.application.FacesMessage; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import javax.faces.context.FacesContext; 
import org.primefaces.event.FileUploadEvent; 

@ManagedBean 
@SessionScoped 
public class FileUploadController { 
    public void handleFileUpload(FileUploadEvent event) { 
     FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded."); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 
} 

của nó về cơ bản cùng mã trong PrimeFaces giới thiệu trang.

Tương tự với mã tải xuống tệp; khi tôi bấm vào tải về không có gì xảy ra. Một cửa sổ bật lên mở ra và đóng lại trước khi tôi thậm chí có thể nhận thấy nó. Tôi có tệp hình ảnh tại chỗ như được đề cập trong luồng tài nguyên nhận được (cho phần tải xuống), nhưng tôi không biết vấn đề là gì. Mã này về cơ bản cũng giống như trong trang giới thiệu PrimeFaces.

Tôi không thấy bất kỳ nhật ký hoặc lỗi nào trong Glassfish trong Netbeans. Tôi cũng không biết cách bật ghi nhật ký nếu cần.

+0

Như @Askel Willgert đã đề cập, bean của bạn có được khai báo trong faces-config.xml không? –

+0

@AlexandreLavoie Xin chào Alex Tôi không nghĩ rằng bạn cần một tập tin cấu hình khuôn mặt trong JSF 2.1 chính xác cho tôi nếu im sai cho ví dụ này mục đích chung – Mitra

+0

Chắc chắn bạn không cần nó, nhưng chúng tôi không nhìn thấy bất kỳ chú thích, vì vậy tôi đã nghĩ rằng có lẽ bean của bạn đã được cấu hình trong faces-config. –

Trả lời

8

Điều đầu tiên bạn cần là thêm một số thư viện để ứng dụng của bạn. Trên thực tế, tải lên tệp PrimeFaces dựa trên thư viện tải lên tệp commons-io và thư viện commons-io của Apache. Vì vậy, hãy tải chúng xuống và thêm chúng vào đường dẫn WEB-INF/lib của bạn:

bạn có thể tải xuống từ liên kết sau.

http://commons.apache.org/io/

http://commons.apache.org/fileupload/

ngoài bạn phải cấu hình nó vào web.xml

<filter> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> 
    <init-param> 
    <param-name>thresholdSize</param-name> 
    <param-value>51200</param-value> 
    </init-param> 
    <init-param> 
    <param-name>uploadDirectory</param-name> 
    <param-value>C:\etc</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping> 

Cũng Nếu bạn muốn thiết lập trình thay đổi điểm đến của các tập tin tải lên của bạn có một cái nhìn:

PrimeFaces FileUpload File Saving Destination

+0

KHÔNG may mắn Kshitij ive thêm các lọ sau commons-io-2.4.jar, commons-io-2.4-sources.jar, commons-fileupload-1.2.2.jar cùng với các khuôn mặt chính và cũng cập nhật web.xml dựa trên mã Tôi cũng không thể nhìn thấy bất kỳ dấu vết ngăn xếp để ít nhất gỡ lỗi nó là có một cách để in nó – Mitra

+1

Ánh xạ bộ lọc bị thiếu từ câu trả lời này. Bạn đã thêm nó chưa? Tất cả đều được mô tả chi tiết trong hướng dẫn sử dụng của PrimeFaces. Xem thêm http://stackoverflow.com/questions/8875818/how-to-use-primefaces-pfileupload-listener-method-is-never-invoked/8880083#8880083 – BalusC

+0

Cảm ơn bạn đã làm việc tích cực sau khi thêm ánh xạ bộ lọc cũng Cảm ơn bạn rất nhiều – Mitra

1

Để có thể sử dụng bean từ xhtml, bạn cần chú thích bộ điều khiển của mình dưới dạng @ManagedBean và đặt một số phạm vi. Tốt hơn là @ViewScoped hoặc @RequestScoped trong trường hợp này.

dụ:

@ManagedBean 
@ViewScoped 
public class FileUploadController { 

    public void handleFileUpload(FileUploadEvent event) { 
     FacesMessage msg = new FacesMessage("Succesful",  event.getFile().getFileName() + " is uploaded."); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 
} 

Tìm hiểu thêm về cách quản lý JSF đậu làm việc ở đây: http://www.mkyong.com/jsf2/configure-managed-beans-in-jsf-2-0/

+0

Xin chào Aksel ive cập nhật bài đăng ive đã được thử với phiên được quản lý và vẫn không thay đổi một chút và có bất kỳ phụ thuộc nào mà tôi phải thêm ngoài JSF lõi mà tôi đã thêm vào chỉ các thủ tục 3.4.2 jar – Mitra

1

Một điều mà tôi đã nhận thấy là nếu bạn không đặt bên trong thẻ "allowTypes" một cụm từ thông dụng một cách chính xác, phần tử "fileupload" không kích hoạt hành động, tạo ấn tượng rằng hành động không thể truy cập được.

Tôi biết rằng đây không phải là vấn đề của bạn ngay bây giờ, nhưng tôi nghĩ điều quan trọng là chia sẻ thông tin này.

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