我正在使用RichFaces 3.3.3 Final的<rich:fileUpload>
。当我在Chrome浏览器中上传某些Excel文件时,它有时会显示“传输失败”错误消息,如下面的屏幕截图所示:
示例代码,
<rich:fileUpload id="fileUpload" addControlLabel="#{bundle.browse}"
allowFlash="#{not TestFileUpload.allow}"
fileUploadListener="#{TestFileUpload.fileUploadListener}"
maxFilesQuantity="10"
autoclear="false"
listHeight="135px;"
uploadControlLabel="#{bundle.upload}"
progressLabel="#{bundle.progress}"
sizeErrorLabel="#{bundle.sizeError}"
noDuplicate="true"
style="width: 100%; height: 135px;">
<a4j:support event="onuploadcomplete"
onbeforedomupdate=""
action="#{TestFileUpload.validateExcel}"
reRender="validationDetailPanelId, messageId"
focus="cancelId"/>
</rich:fileUpload>
Web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Production</param-value>
</context-param>
<context-param>
<param-name>javax.faces.DISABLE_FACELET_JSF_VIEWHANDLER</param-name>
<param-value>true</param-value>
</context-param>
<!--Configuration for Facelets-->
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.jsp</param-value>
</context-param>
<context-param>
<param-name>
facelets.RECREATE_VALUE_EXPRESSION_ON_BUILD_BEFORE_RESTORE
</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_VIEW_MAPPINGS</param-name>
<param-value>*.xhtml</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.verifyObjects</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.validateXml</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.richfaces.LoadStyleStrategy</param-name>
<param-value>all</param-value>
</context-param>
<context-param>
<param-name>org.richfaces.LoadScriptStrategy</param-name>
<param-value>all</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
<param-name>org.ajax4jsf.SKIN</param-name>
<param-value>Wine</param-value>
</context-param>
<context-param>
<param-name>org.richfaces.CONTROL_SKINNING</param-name>
<param-value>enable</param-value>
</context-param>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>
/WEB-INF/test/faces-config.xml
</param-value>
</context-param>
<filter>
<display-name>RichFaces Filter</display-name>
<filter-name>Ajax4jsf</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
<init-param>
<param-name>enable-cache</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>createTempFiles</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>maxRequestSize</param-name>
<param-value>1048576</param-value>
</init-param>
</filter>
<filter>
<filter-name>SFilter</filter-name>
<filter-class>com.test.SFilter</filter-class>
</filter>
<listener>
<display-name>SLCListener</display-name>
<listener-class>com.test.SLCListener</listener-class>
</listener>
<!-- End of Rich Faces and A4JSF -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Custom Faces Servlet</servlet-name>
<servlet-class>com.test.CFServlet</servlet-class>
<init-param>
<param-name>error</param-name>
<param-value>/faces/pages/errorPage.jsp</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>ASServlet</servlet-name>
<servlet-class>com.test.ASServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>PASRServlet</servlet-name>
<servlet-class>com.test.PASRServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>LOServlet</servlet-name>
<servlet-class>com.test.LOServlet</servlet-class>
<init-param>
<param-name>DException</param-name>
<param-value>/faces/pages/dException.jsp</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>FDServlet</servlet-name>
<servlet-class>com.test.FDServlet</servlet-class>
</servlet>
<!--OverRiding FacesServlet Start-->
<servlet-mapping>
<servlet-name>Custom Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Custom Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<!--Filter for ajaxrequest and Custom Faces Servlet-->
<filter-mapping>
<filter-name>Ajax4jsf</filter-name>
<servlet-name>Custom Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>SSEFilter</filter-name>
<servlet-name>Custom Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
<!--End-->
<!-- Filter for Commons File Upload -->
<filter>
<filter-name>Extensions Filter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
<init-param>
<param-name>uploadMaxFileSize</param-name>
<param-value>20m</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Extensions Filter</filter-name>
<servlet-name>Custom Faces Servlet</servlet-name>
</filter-mapping>
<!-- End of commons file upload filter -->
<error-page>
<error-code>404</error-code>
<location>/faces/pages/error/errorPage.jsp</location>
</error-page>
</web-app>
该文件也未上传到服务器。这是怎么造成的,我该如何解决?
答案 0 :(得分:0)
自Chrome最新更新以来,我遇到了同样的问题。 Chrome版本:36
单击上传按钮时,bean中的fileUploadListener方法被调用两次。 调试模式显示第二次,文件丢失。
我绕过了这样的问题:
public void fileUploadListener(UploadEvent event) {
if(!event.getUploadItem().getFileName().equalsIgnoreCase("")){
//code here
}
}
答案 1 :(得分:0)
首先在web.xml中创建bean会话范围,将createTempFiles的boolean属性更改为false而不是true,如下所示:
<init-param>
<param-name>createTempFiles</param-name>
<param-value>false</param-value>
</init-param>