PrimeFacesアップロードファイル中国の文字化け

      検索についてのPrimeFacesのうち<P:ファイルアップロード>の一部;このアプローチの利点は、編集なしで(と、次のように、ビットを注文化け中国のファイルをアップロードする問題は、基本的に解決策を見つけるためにGoogleのように少し、ウォンが解決しませんでしたソースファイル):

一、PrimeFacesバージョン:

              primefaces-3.2.jar


第二に、関連文書:

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

。次は中国の簡体され

たファイルをアップロードし、(中国語など)非ラテン文字を使用し、ファイル名は、サーバー側でエンコードされます混乱(すなわち中国文字化け)テキスト形式他の入力もを受け取ります。<ファイルアップロードのp>のPrimeFacesは、それは混乱(すなわち中国文字化けを)エンコードされます。
これは、コーディングの問題です。

関連フォーラムのトピック接続:http://primefaces.prime.com.tr/forum/viewtopic.php?f=3&t=1963 http://primefaces.prime.com.tr/forum/viewtopic.php?f=3&t= 6513は、 
「中国のゴミ問題のコモンズのFileUploadを解決する」を参照してください:http://blog.csdn.net/luhao/archive/2007/07/16/1693641.aspx 
私は、フォーラムに登録したが、私はアクティベーションを受け取ることができませんメール。
したがって、私は、フォーラムにログインできず、:-(フォーラムにコメントを追加することはできません
私はこの問題を解決するために解決策を見つけると、わずか3ステップで:
ステップ1修復primefacesは、読み取り専用\ SRC \メイン\のJava \組織をFileUploadFilter.java \ Webアプリケーションの\フィルタ\ \ PrimeFaces 
インデックス:FileUploadFilter.java 
+++ FileUploadFilter.java(作業コピー)
@@ -69,6 +69,10 @@






 
=================================== ================================
--- FileUploadFilter.java(版本4615)
 			} 

 			ServletFileUpload servletFileUpload =新しいServletFileUpload(diskFileItemFactory)。
+文字列エンコーディング= request.getCharacterEncoding()。
+ IF(!エンコーディング= NULL){ 
+ servletFileUpload.setHeaderEncoding(符号化); 
+} 
 			MultipartRequest multipartRequest =新しいMultipartRequest(HttpServletRequestを、servletFileUpload)。

 			(logger.isLoggable(Level.FINE))であれば

2步骤。修复primefaces-読み取り専用\ SRC \メイン\のJava \組織\ primefaces \ webappの\ MultipartRequest.java 

インデックス:MultipartRequest.java 
======================= ============================================
--- MultipartRequest.java(版本4615) 
+++ MultipartRequest.java(工作副本)
@@ - 16,6 +16,7 @@
 パッケージorg.primefaces.webapp。

 インポートにjava.io.IOException; 
+輸入java.io.UnsupportedEncodingException。
 輸入はjava.util.ArrayList; 
 輸入java.util.Collections。
 インポートのjava.util.Enumeration; 
@@ -24,6 +25,7 @@ 
 輸入はjava.util.List; 
 輸入java.util.Map; 
 輸入java.util.Set; 
+輸入java.util.logging.Levelの。
 輸入java.util.logging.Loggerの。

 インポートのjavax.servlet.http.HttpServletRequest; 
@@ -81,11 +83,23 @@ 
 	} 

 	プライベートボイドaddFormParam(FileItemアイテム){ 
- IF(formParams.containsKey(item.getFieldName())){
。 - formParams.get(item.getFieldName())を追加(item.getString()); 
+文字列str = NULL;
+文字列のcharset = this.getRequest()getCharacterEncoding()。
+ IF(文字セット== NULL){ 
+ STR = item.getString()。
 		}他{ 
+試み{ 
+ STR = item.getString(文字セット)。
+}キャッチ(にUnsupportedEncodingExceptionのEX){ 
+ STR = item.getString()。
+ Logger.getLogger(MultipartRequest.class.getName())ログ(Level.SEVERE、ヌル、EX)。
+} 
+} 
+ IF(formParams.containsKey(item.getFieldName())){ 
+ formParams.get(item.getFieldName())(STR)を加えます。
+}他{ 
 			リストの<string>アイテム=新規のArrayList <ストリング>(); 
- (item.getString())items.add。
+ items.add(STR)。
 			formParams.put(item.getFieldName()、項目); 
 		} 
 	}
 
步骤3。修复primefaces-例\ショーケース\ SRC \メイン\のWebアプリケーションの\ WEB-INF \ web.xmlファイル(CharacterEncodingFilter应该放在FileUploadFilter的前面)

インデックス:web.xmlの
================ ================================================== = 
---のweb.xml(版本4615)
+++のweb.xml(工作副本)
@@ -37,20 +37,20 @@ 
     - > 

     <フィルター> 
- <フィルタ名> PrimeFacesするFileUploadは/ <フィルタフィルタ名> 
- <フィルタクラス> org.primefaces.webapp.filter.FileUploadFilter </フィルタクラス> 
+ <フィルタ名>文字エンコーディングフィルター</フィルタ名> 
+ <フィルタクラス> org.primefaces。 examples.filter。
     </フィルタ>  
     <フィルター-マッピング> 
- <フィルタ名>>のFileUploadフィルタ</フィルタ名をPrimeFaces 
+ <フィルタ名>文字エンコーディングフィルター</フィルタ名>
         の<servlet-name>はサーブレット</サーブレット名>顔
     </フィルタリングマッピング> 

     <フィルター> 
- <フィルタ名>文字エンコードフィルタ</フィルタ名> 
- <フィルタクラス> org.primefacesを.examples.filter.CharacterEncodingFilter </フィルタクラス> 
+ <フィルタ名> PrimeFacesするFileUploadフィルタ</フィルタ名> 
+ <フィルタクラス> org.primefaces.webapp.filter.FileUploadFilter </フィルタクラス> 
     </フィルタ> 
     <フィルタマッピング> 
- <フィルタ名>文字エンコードフィルタ</フィルタ名> 
+ <フィルタ名> PrimeFacesするFileUploadが<フィルタ/フィルタ名> 
         <サーブレット名>顔サーブレット</サーブレット名> 
     </のfilter-mapping>

第三に、プロジェクト内の同じ名前の上で、新しいファイルによると:


第四に、web.xmlに以下を追加します。

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

五、CharacterEncodingFilterファイル:

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 {

	}
}


第六に、の効果:



おすすめ

転載: blog.csdn.net/ptianfeng/article/details/9351845