PrimeFaces upload files Chinese garbled

      Some of the search out of respect PrimeFaces <p: fileUpload> problem uploading files Chinese garbled, basically did not resolve won, so Google a bit to find a solution; and order a bit, as follows (The advantage of this approach is without editing Source File):

一、PrimeFaces version:

              primefaces-3.2.jar


Second, the relevant documents:

           http://code.google.com/p/primefaces/issues/detail?id=787

The following is Simplified Chinese. 

When PrimeFaces of <p: fileUpload> Upload files and use non-Latin characters (such as Chinese), the file name will be encoded on the server side receives confusion (ie Chinese garbled) text form other inputs also It will be encoded confusion (ie Chinese garbled). 
This is a coding problem. 

Related Forum Topics connection: http://primefaces.prime.com.tr/forum/viewtopic.php?f=3&t=1963 http://primefaces.prime.com.tr/forum/viewtopic.php?f=3&t= 6513 
see "solving Commons FileUpload of Chinese garbage problem": http://blog.csdn.net/luhao/archive/2007/07/16/1693641.aspx 
I registered in the forum, but I can not receive the activation mail. 
Therefore, I can not log into the forum and can not add comments in the forum :-( 
I find a solution to fix this problem, and in just three steps: 
Step 1. Repair primefaces-read-only \ src \ main \ java \ org \ PrimeFaces \ the webapp \ filter \ FileUploadFilter.java 
Index: FileUploadFilter.java 
=================================== ================================






 
--- FileUploadFilter.java (version 4615) 
+++ FileUploadFilter.java (working copy) 
@@ -69,6 +69,10 @@
 			}

 			ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
+                        String encoding = request.getCharacterEncoding();
+                        if (encoding != null) {
+                            servletFileUpload.setHeaderEncoding(encoding);
+                        }
 			MultipartRequest multipartRequest = new MultipartRequest(httpServletRequest, servletFileUpload);

 			if(logger.isLoggable(Level.FINE))

步骤2. 修复 primefaces-read-only\src\main\java\org\primefaces\webapp\MultipartRequest.java

Index: MultipartRequest.java
===================================================================
--- MultipartRequest.java	(版本 4615)
+++ MultipartRequest.java	(工作副本)
@@ -16,6 +16,7 @@
 package org.primefaces.webapp;

 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Enumeration;
@@ -24,6 +25,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.logging.Level;
 import java.util.logging.Logger;

 import javax.servlet.http.HttpServletRequest;
@@ -81,11 +83,23 @@
 	}

 	private void addFormParam(FileItem item) {
-		if(formParams.containsKey(item.getFieldName())) {
-			formParams.get(item.getFieldName()).add(item.getString());
+		String str = null;
+		String charset = this.getRequest().getCharacterEncoding();
+		if (charset == null) {
+			str = item.getString();
 		} else {
+			try {
+				str = item.getString(charset);
+			} catch (UnsupportedEncodingException ex) {
+				str = item.getString();
+				Logger.getLogger(MultipartRequest.class.getName()).log(Level.SEVERE, null, ex);
+			}
+		}
+		if (formParams.containsKey(item.getFieldName())) {
+			formParams.get(item.getFieldName()).add(str);
+		} else {
 			List<String> items = new ArrayList<String>();
-			items.add(item.getString());
+			items.add(str);
 			formParams.put(item.getFieldName(), items);
 		}
 	}

Step 3. Repair primefaces-examples \ showcase \ src \ main \ webapp \ WEB-INF \ web.xml (CharacterEncodingFilter FileUploadFilter should be placed in front of) 

Index: the web.xml 
============= ================================================== ==== 
--- the web.xml (version 4615) 
+++ the web.xml (working copy) 
@@ -37,20 +37,20 @@ 
     -> 

     <filter> 
- <filter-name> PrimeFaces FileUpload the filter </ filter-name> 
- <filter-class> org.primefaces.webapp.filter.FileUploadFilter </ filter-class> 
+ <filter-name> Character Encoding the filter </ filter-name> 
+        <filter-class>org.primefaces.examples.filter.CharacterEncodingFilter</filter-class>
     </ filter> 
     <filter- Mapping> 
- <filter-name> PrimeFaces the FileUpload the filter </ filter-name> 
+ <filter-name>Character Encoding Filter</filter-name>
         <servlet-name>Faces Servlet</servlet-name>
     </filter-mapping>

     <filter>
-        <filter-name>Character Encoding Filter</filter-name>
-        <filter-class>org.primefaces.examples.filter.CharacterEncodingFilter</filter-class>
+        <filter-name>PrimeFaces FileUpload Filter</filter-name>
+        <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
     </filter>
     <filter-mapping>
-        <filter-name>Character Encoding Filter</filter-name>
+        <filter-name>PrimeFaces FileUpload Filter</filter-name>
         <servlet-name>Faces Servlet</servlet-name>
     </filter-mapping>

Third, according to the above, the new file with the same name in the project:


Fourth, in the web.xml add the following:

<filter>
        <filter-name>Character Encoding Filter</filter-name>
        <filter-class>cn.ems.budget.global.CharacterEncodingFilter</filter-class>
     </filter>
     <filter-mapping>
        <filter-name>Character Encoding Filter</filter-name>
         <servlet-name>Faces Servlet</servlet-name>
     </filter-mapping>

     <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>10000000</param-value>
		</init-param>
     </filter>
     <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
         <servlet-name>Faces Servlet</servlet-name>
     </filter-mapping>

Five, CharacterEncodingFilter file:

package cn.ems.budget.global;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharacterEncodingFilter implements Filter{
	public void destroy() {

	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		request.setCharacterEncoding("UTF-8");
		System.out.println("getCharacterEncoding:"+request.getCharacterEncoding());
		response.setCharacterEncoding("UTF-8");
		chain.doFilter(request, response);

	}

	public void init(FilterConfig filterConfig) throws ServletException {

	}
}


Sixth, the effect of:



Guess you like

Origin blog.csdn.net/ptianfeng/article/details/9351845