2012-11-20 66 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”元素不会触发这个动作,给人的印象是动作无法到达。

我知道这不是您现在的问题,但我认为分享这些信息非常重要。

相关问题