- 相關(guān)推薦
關(guān)于Struts中文問題的解決方法
碰到struts中文問題時,在網(wǎng)上查了很多資料,想必碰到過此類問題的朋友也都查過,也都看到過差不多是同一篇文章。
但是依法炮制了若干遍,JSP頁面上仍然顯示的是亂碼,無奈,實踐出真知,只好自己一遍一遍的試驗,終于成功了,在windows的weblogic8下,和unix的weblogic8下均正確顯示漢字。
以下是代碼內(nèi)容:
首先是JSP頁面的內(nèi)容,最簡化的一個form
TestItem English :
TestItem Chinese :
注意,頁面的字符集一定要定義成gb2312,否則顯示不了正確的漢字了,代碼上半部的logic:iterate 標(biāo)簽是 action 處理完畢后,返回給頁面顯示的。至于form提交的部分,由struts機制去做了,我只把 testitem_config 這個 action 的原代碼給出,大家就看明白了:
public class TestItemConfigAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)throws Exception {
TestItemConfigForm pcForm = (TestItemConfigForm)form;
String[] entryIndexArray = pcForm.getEntrypro();
String testPartKey;
ArrayList testPartOptionsEn = new ArrayList();
ArrayList testPartOptionsCn = new ArrayList();
ServletContext context = getServlet()。getServletContext();
String file = context.getRealPath(“/WEB-INF/classes/resource/TestItem.properties”);
PropertiesFileOperate pOperate = new PropertiesFileOperate(file);
Properties property = pOperate.getProperties();
int testpartnum = Integer.parseInt(property.getProperty(“test.item.num”));
if(pcForm.getOperateFlag() != null && !“”。equals(pcForm.getOperateFlag())) {
if(Integer.parseInt(pcForm.getOperateFlag()) == 1 &&
pcForm.getTestItemEn() != null && !“”。equals(pcForm.getTestItemEn())){
String addKeyEn = “test.item.en.” + (testpartnum + 1);
String addKeyCn = “test.item.cn.” + (testpartnum + 1);
String addValueEn = pcForm.getTestItemEn()。trim();
String addValueCn = pcForm.getTestItemCn()。trim();
String addValueCnWirite = new String(addValueCn.getBytes(“ISO-8859-1”));
pOperate.modifyProperties(“test.item.num”, (testpartnum + 1) + “”);
pOperate.addProperties(addKeyEn, addValueEn);
pOperate.addProperties(addKeyCn, addValueCnWirite);
pOperate.saveFile();
pOperate = null;
}
if(Integer.parseInt(pcForm.getOperateFlag()) == 2 &&
pcForm.getTestItemEn() != null && !“”。equals(pcForm.getTestItemEn())){
int entryIndex = Integer.parseInt(pcForm.getTestItemIndex()。trim());
String addKeyEn = “test.item.en.” + entryIndex;
String addKeyCn = “test.item.cn.” + entryIndex;
String addValueEn = pcForm.getTestItemEn()。trim();
String addValueCn = pcForm.getTestItemCn()。trim();
String addValueCnWirite = new String(addValueCn.getBytes(“ISO-8859-1”));
pOperate.modifyProperties(addKeyEn, addValueEn);
pOperate.modifyProperties(addKeyCn, addValueCnWirite);
pOperate.saveFile();
pOperate = null;
}
if(Integer.parseInt(pcForm.getOperateFlag()) == 3){
for(int i = 0; i 《 entryIndexArray.length; i++){
String indexEntry = (entryIndexArray[i]。substring(1, entryIndexArray[i]。indexOf(“,”)))。trim();
String addKeyEn = “test.item.en.” + indexEntry;
String addKeyCn = “test.item.cn.” + indexEntry;
pOperate.modifyProperties(addKeyEn, “”);
pOperate.modifyProperties(addKeyCn, “”);
}
pOperate.saveFile();
pOperate = null;
}
}
PropertiesFileOperate pOperateShow = new PropertiesFileOperate(file);
Properties propertyShow = pOperateShow.getProperties();
int testpartNumber = Integer.parseInt(propertyShow.getProperty(“test.item.num”));
ArrayList array = new ArrayList();
for(int i = 1; i 《= testpartNumber; i++){
ArrayList arr = new ArrayList();
testPartKey = “test.item.en.”+i;
if (propertyShow.getProperty(testPartKey) != null &&
!“”。equals(propertyShow.getProperty(testPartKey))){
arr.add(i+“”);
testPartOptionsEn.add(propertyShow.getProperty(testPartKey));
arr.add(propertyShow.getProperty(testPartKey));
testPartKey = “test.item.cn.”+i;
testPartOptionsCn.add(new String(propertyShow.getProperty(testPartKey)。getBytes(),“gb2312”));
arr.add(propertyShow.getProperty(testPartKey));
array.add(arr);
}
}
request.setAttribute(“box”,array);
pcForm.reset(mapping, request);
return mapping.findForward(“testitemone”);
}
}
這個 action 并不復(fù)雜, 首先它定義了一個 properties 文件 TestItem.properties,在web服務(wù)器下的/WEB-INF/classes/resource/下面,用來記錄頁面上輸入的內(nèi)容,由于 String addValueCnWirite = new String(addValueCn.getBytes(“ISO-8859-1”)) 這個語句進行了字符轉(zhuǎn)換,所以 properties 文件中記錄的內(nèi)容大概都是這樣子的:
test.item.cn.29=\u7F1D\u9699\u5F02\u5E38
如果把程序改成記錄到數(shù)據(jù)庫中,也應(yīng)該是這個樣子,屬于Unicode編碼吧。
而當(dāng)要把記錄的內(nèi)容輸出到客戶端時候,new String(propertyShow.getProperty(testPartKey)。getBytes(),“gb2312”)) 這個語句又把Unicode編碼轉(zhuǎn)換成了GB2312,所以要求JSP頁面charset=gb2312,呵呵,這樣在windows 和 unix兩個系統(tǒng)下都可以正常顯示中文了,絕對沒有問題。
【Struts中文問題的解決方法】相關(guān)文章:
Struts中文問題怎么解決09-09
電腦問題及解決方法匯總07-14
紋眉常見問題及解決方法07-03
硬件常見問題的解決方法10-15
形體訓(xùn)練中的問題和解決方法08-20
CAD里的常見問題及解決方法10-03