検索についての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 {
}
}
第六に、の効果: