Strus2 + Freemarker + Sitemesh 亂碼解決方案
Struts2
1.src目錄添加文件struts.properties
<!-- 該屬性設置Struts 2是否支持動態方法調用,該屬性的默認值是true。如果需要關閉動態方法調用,則可設置該屬性為false。 -->
struts.enable.DynamicMethodInvocation=true
<!-- 該屬性指定視圖標簽默認的視圖主題,該屬性的默認值是xhtml。 -->
struts.ui.theme=simple
<!-- 是否struts過濾器中提供的靜態內容應該被瀏覽器緩存在頭部屬性中 -->
struts.serve.static.browserCache=false
<!-- 在url中產生 默認的includeParams -->
struts.url.includeParams=none
<!-- 當struts配置文件修改后,系統是否重新加載配文件,默認是false -->
struts.configuration.xml.reload=true
<!-- 開發模式下使用,這樣可以打印出更詳細的錯誤信息 -->
struts.devMode=true
<!-- 修改資源文件后自動裝載 -->
struts.i18n.reload=true
<!-- 該屬性指定XSLT Result是否使用樣式表緩存。當應用處于開發階段時,該屬性通常被設置為true;當應用處于產品使用階段時,該屬性通常被設置為false。 -->
struts.xslt.nocache=true
<!-- action擴展名 -->
struts.action.extension=jhtml
<!-- 默認的國際化地區信息 -->
struts.locale=zh_CN
<!-- 國際化信息內碼 -->
struts.i18n.encoding=UTF-8
struts.enable.DynamicMethodInvocation=true
<!-- 該屬性指定視圖標簽默認的視圖主題,該屬性的默認值是xhtml。 -->
struts.ui.theme=simple
<!-- 是否struts過濾器中提供的靜態內容應該被瀏覽器緩存在頭部屬性中 -->
struts.serve.static.browserCache=false
<!-- 在url中產生 默認的includeParams -->
struts.url.includeParams=none
<!-- 當struts配置文件修改后,系統是否重新加載配文件,默認是false -->
struts.configuration.xml.reload=true
<!-- 開發模式下使用,這樣可以打印出更詳細的錯誤信息 -->
struts.devMode=true
<!-- 修改資源文件后自動裝載 -->
struts.i18n.reload=true
<!-- 該屬性指定XSLT Result是否使用樣式表緩存。當應用處于開發階段時,該屬性通常被設置為true;當應用處于產品使用階段時,該屬性通常被設置為false。 -->
struts.xslt.nocache=true
<!-- action擴展名 -->
struts.action.extension=jhtml
<!-- 默認的國際化地區信息 -->
struts.locale=zh_CN
<!-- 國際化信息內碼 -->
struts.i18n.encoding=UTF-8
Freemarker
1.設置
<result name="error" type="freemarker">
<param name="location">/WEB-INF/pages/console/AccountEdit.ftl</param>
<param name="contentType">text/html;charset=GBK</param>
</result>
<param name="location">/WEB-INF/pages/console/AccountEdit.ftl</param>
<param name="contentType">text/html;charset=GBK</param>
</result>
2.或者在src目錄添加文件freemarker.properties
locale=zh_CN
default_encoding=UTF-8
number_format=#
date_format=yyyy-MM-dd
time_format=HH:mm:Ss
datetime_format=yyyy-MM-dd HH\:mm\:Ss
default_encoding=UTF-8
number_format=#
date_format=yyyy-MM-dd
time_format=HH:mm:Ss
datetime_format=yyyy-MM-dd HH\:mm\:Ss
Sitemesh
sitemesh在處理編碼時會使用系統的編碼,com.opensymphony.module.sitemesh.filter.TextEncoder文件
private static final String DEFAULT_ENCODING = System.getProperty("file.encoding");
private static final boolean JDK14 =
System.getProperty("java.version").startsWith("1.4")
|| System.getProperty("java.version").startsWith("1.5");
public char[] encode(byte[] data, String encoding) throws IOException {
if (encoding == null) {
encoding = DEFAULT_ENCODING;
}
//encoding = "UTF-8";
if (JDK14) {
return get14Buffer(data, encoding);
} else {
return get13Buffer(data, encoding);
}
}
private static final boolean JDK14 =
System.getProperty("java.version").startsWith("1.4")
|| System.getProperty("java.version").startsWith("1.5");
public char[] encode(byte[] data, String encoding) throws IOException {
if (encoding == null) {
encoding = DEFAULT_ENCODING;
}
//encoding = "UTF-8";
if (JDK14) {
return get14Buffer(data, encoding);
} else {
return get13Buffer(data, encoding);
}
}
所以需要在sitemesh啟動前設置環境
System.setProperty("file.encoding","UTF-8")
Jsp
<head>
<%@ page contentType="text/html; charset=utf-8" language="java"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>
</head>
<%@ page contentType="text/html; charset=utf-8" language="java"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>
</head>
posted on 2011-06-07 12:40 void 閱讀(666) 評論(0) 編輯 收藏 所屬分類: Struts2