File upload PrimeFaces 4.0文件上载适用于Mojarra 2.2,但不适用于MyFaces 2.2
PrimeFaces 4.0最终文件上传元素有一个有趣的问题。 我正在尝试运行:File upload PrimeFaces 4.0文件上载适用于Mojarra 2.2,但不适用于MyFaces 2.2,file-upload,jsf-2,primefaces,myfaces,File Upload,Jsf 2,Primefaces,Myfaces,PrimeFaces 4.0最终文件上传元素有一个有趣的问题。 我正在尝试运行: PrimeFaces 4.0决赛 Apache MyFaces 2.2.0-beta Tomcat 7.0.27 我现在有一个非常简单的设置 XHTML页面: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.
- PrimeFaces 4.0决赛
- Apache MyFaces 2.2.0-beta
- Tomcat 7.0.27
<?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>
<p:fileUpload
fileUploadListener="#{fileUploadController.handleFileUpload}"
mode="advanced" update="messages" sizeLimit="100000"
allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />
<p:growl id="messages" showDetail="true" />
</h:form>
</h:body>
</html>
当选择一个文件并上传它时,不会发生任何事情
上载提交成功,响应如下:
<?xml version="1.0" encoding="UTF-8"?><partial-response><changes><update id="j_id__v_0:javax.faces.ViewState:1"><![CDATA[2C7ZmtwSmrlbgI/wJLI2CLBaMOQP9R/pYkIXpHlXkhSKIhtfFM0sx0HmL8o9MQY2MdHXg4t1vUjJbUYkAdFBmOQUaFy7hFhPr34Za4hOuLW4CPNx]]></update></changes></partial-response>
更新
似乎MyFaces2.2.0-beta在使用Servlet3.x中的PartAPI时出现了问题
使用PrimeFaces 3.x required的web.xml
过滤器和commons file upload&commons io jars作为解决方案的一部分,但是,我们还需要向web.xml
添加以下上下文参数,否则过滤器将被忽略:
<context-param>
<param-name>primefaces.UPLOADER</param-name>
<param-value>commons</param-value>
</context-param>
primefaces.UPLOADER
平民
这将迫使PrimeFaces使用commons库来解决问题
尽管如此,如果有人有任何想法,我仍然想知道为什么MyFaces似乎不能使用servlet部分API。我怀疑这可能与我的Tomcat版本有关,因为我只在7.0.27上,但我对此表示怀疑
在
web.xml
文件中提及以下过滤器,用于使用PrimeFaces上载文件
<!-- PrimeFaces FileUpload Filter -->
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
PrimeFaces文件上载筛选器
org.primefaces.webapp.filter.FileUploadFilter
PrimeFaces文件上载筛选器
Facesservlet
并将jar添加到lib文件夹。PrimeFaces需要以下JAR用于文件上载
,,
最近发现了一个类似的问题,在中有更好的描述。这是一个与webkit浏览器相关的问题,只有当ajax响应足够大时才会出现。它已经被修复。udaykiran pulipati的回答促使我在我的项目中将commons-fileupload-1.2.2.jar替换为commons-fileupload-1.3.jar,但这并没有解决我的问题,因为我正在使用MyFaces 2.2、PrimeFaces Elite 4.0.8和TomEE 1.6.1-snapshot 另外,根据udaykiran pulipati的回答,我已经在几个月前将PrimeFaces文件上传过滤器配置添加到了我的web.xml中 所以,我看了PrimeFaces4.0用户指南,发现了一些可以在web.xml中指定的“新”内容。因此,我在web.xml中添加了以下内容:
<context-param>
<param-name>primefaces.UPLOADER</param-name>
<param-value>commons</param-value>
</context-param>
primefaces.UPLOADER
平民
最后,PrimeFaces(Elite)4.0.x FileUpload与MyFaces 2.2配合使用。在他们的用户指南中说,如果我想使用commons FileUpload jar而不是servlet 3.0 api,我只需要这些过滤器。我还想指出的是,对于Mojarra,文件上传在没有过滤器的情况下可以正常工作,jarsIt不应该是MyFaces的问题,因为首先我们讨论的是primefaces组件,对吗?primefaces首先做什么来覆盖JSF?谁知道呢,这是我无法控制的。你应该问PrimeFaces的伙计们这个问题。实际上,它似乎与myfaces有关,请参阅stackoverflow.com/questions/21948228/how-to-get-jsf-file-upload-to-work-on-tomee-1-6
<!-- PrimeFaces FileUpload Filter -->
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<context-param>
<param-name>primefaces.UPLOADER</param-name>
<param-value>commons</param-value>
</context-param>