問題描述:
最近在使用SSI寫練習代碼時,遇到了使用struts2的<s:actionmessage/>擷取properties配置檔案裡的提示消息時,出現了亂碼問題。查找了好久,才發現是配置檔案編碼格式的問題。properties預設的編碼格式是ISO-8859-1,而我的Myeclipse裡的properties檔案由于公司項目的原因,把預設的的編碼格式修改成了utf-8,導緻亂碼問題。
解決辦法:
1、不要修改properties配置檔案的預設的編碼格式ISO-8859-1,在頁面即可接到不亂碼的中文提示。
擷取消息,并彈出提示
<s:if test="hasActionErrors()">
<s:iterator value="actionErrors" var="msg" begin="0" end="0">
<script>
alert("<s:property value='#msg'/>");
</script>
</s:iterator>
</s:if>
<s:if test="hasActionMessages()">
<s:iterator value="actionMessages" var="msg" begin="0" end="0">
<script>
alert("<s:property value='#msg'/>");
</script>
</s:iterator>
</s:if>
<s:if test="hasFieldErrors()">
<s:iterator value="fieldErrors" var="msg" begin="0" end="0">
<script>
alert("<s:property value='#msg'/>");
</script>
</s:iterator>
</s:if>
2、properties配置檔案的編碼格式是utf-8,在頁面接受消息時,進行轉碼操作。
Collection actionMessages = (Collection) request.getAttribute("actionMessages");
if (actionMessages != null) {
Iterator iter2 = actionMessages.iterator();
if (iter2.hasNext()) {
String mess = (String) iter2.next();
mess = new String(mess.getBytes("iso-8859-1"), "utf-8");
out.write("alert('" + mess + "');");
}
}