2012-11-20 67 views
8

我正在使用PrimeFaces 3.1.2,NetBeans 7.2,JSF 2.1和GlassFish 3.1.2。FileDownload和FileUpload JSF Primefaces不工作

我使用的是從http://www.primefaces.org/showcase/ui/fileUploadAuto.jsfhttp://www.primefaces.org/showcase/ui/fileDownload.jsf得到的實際代碼。

當我運行文件上傳代碼時,它根本不起作用。該文件沒有上傳,也沒有顯示成功消息。但是,如果文件大小超過所提到的大小,則會顯示一條消息,指出文件大小過大。

這是我的觀點:

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

這是我支持bean:

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

它基本上在PrimeFaces相同的代碼展示頁面。

與文件下載代碼類似;當我點擊下載沒有任何反應。在我注意到它之前,彈出窗口會打開並關閉。我有get資源流(用於下載部分)中提到的映像文件,但我不知道是什麼問題。代碼基本上與PrimeFaces展示頁面中的代碼相同。

我在Netbeans的Glassfish下看不到任何日誌或錯誤。如果需要,我也不知道如何啓用日誌記錄。

+0

作爲@Askel Willgert mentionned,是你的bean在faces-config.xml中聲明? –

+0

@AlexandreLavoie你好亞歷克斯我不認爲你需要在JSF 2.1的faces-config文件中糾正我,如果我錯了這個通用的例子 – Mitra

+0

當然,你不需要它,但我們並沒有看到任何註釋,所以我在想,也許你的bean是在faces-config中配置的。 –

回答

8

你需要的第一件事是添加一些庫應用程序。事實上,PrimeFaces文件上傳依賴於Apache commons-file-upload和commons-io庫。因此下載並將它們添加到您的WEB-INF/lib路徑中:

您可以從以下鏈接下載它。

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

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

除了你必須把它配置到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> 

此外,如果你想通過編程設置更改上傳文件的目標看看:

PrimeFaces FileUpload File Saving Destination

+0

沒有運氣Kshitij香港專業教育學院增加了以下罐子的commons-IO-2.4.jar,公共-IO-2.4-sources.jar,公地文件上傳-1.2.2.jar與素面一起和基於也更新您的web.xml代碼我也看不到任何堆棧跟蹤ATLEAST調試是有沒有辦法打印 – Mitra

+1

過濾器映射從這個答案丟失。你添加了嗎? PrimeFaces用戶指南中有詳細描述。另請參見http://stackoverflow.com/questions/8875818/how-to-use-primefaces-pfileupload-listener-method-is-never-invoked/8880083#8880083 – BalusC

+0

謝謝balus它添加過濾器映射後的工作也謝謝非常多 – Mitra

1

爲了能夠使用xhtml中的bean,您需要將控制器註釋爲@ManagedBean並設置一些範圍。在這種情況下,最好使用@ViewScoped或@RequestScoped。

例如:

@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); 
    } 
} 

瞭解更多關於JSF管理的bean是如何在這裏工作:http://www.mkyong.com/jsf2/configure-managed-beans-in-jsf-2-0/

+0

您好斯文香港專業教育學院更新後的香港專業教育學院試圖與管理和會話仍然並沒有改變了一下,在那裏,我必須從核心JSF除了加我僅添加了primefaces 3.4.2罐子任何依賴 – Mitra

1

我注意到的一件事是,如果你沒有正確地在標籤「allowTypes」中放入一個正則表達式,那麼「fileupload」元素不會觸發這個動作,給人的印象是動作無法到達。

我知道這不是您現在的問題,但我認爲分享這些信息非常重要。

相關問題