屬性檔案儲存使用者名,密碼資訊,並以中文字元提交。此屬性檔案以UTF-8格式建立的,但內容不使用 native2ascii 編碼。
讓我們試著通過一些UI標籤,來顯示中國漢字。檢視頁面宣告為UTF-8格式的HTML元標記來顯示。
... <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> ... <s:form action="validateUser"> <s:textfield key="global.username" name="username"/> <s:password key="global.password" name="password"/> <s:submit key="global.submit" name="submit" /> <div>Testing 1 : <s:property value="getText('global.username')" /></div> <div>Testing 2 : <s:text name="global.password" /></div></br/> </s:form> ... <s:url id="localezhCN" namespace="/" action="locale" > <s:param name="request_locale" >zh_CN</s:param> </s:url> ... <s:a href="%{localezhCN}" >Chinese</s:a> ...
結果
<s:textfield key="global.username" name="username"/> <s:password key="global.password" name="password"/> Testing 2 : <s:text name="global.password" />
深入到 TextProvider.getText()的原始碼後,它使用的資源 bundle.getString()來從資源包檢索的訊息,所以不正確的訊息是合理的。但是,為什麼「s:text「, 「s:textfield」 和 「s:password」 能夠正確顯示了中文的訊息,為什麼「s:submit」會失敗?在有太多的問題,讓我們看看範例2...
這一次,屬性檔案使用native2ascii工具處理中國漢字的編碼正確。
結果如下所示:
其結果是完全逆轉,現在 「s:submit」 和 「getText()」 是能夠正確地顯示它,但其他UI元件失敗。 這裡是按預期方式工作的,因為在Struts 2推薦使用getText(),以顯示國際化或在地化的訊息。問題是,為什麼「s:submit」會不同呢?
這裡有幾個問題:
<s:text name="global.username"/> <s:property value="getText('global.username')"/>
然而,這僅適用於英國或一些「英語狀(歐洲)」 的字元,如法文,德文。但對中文或日文,這兩種方法將返回完全不同的輸出。真的不知道Struts2的在地化該怎麼辦了。
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head>
在Struts2,meta標籤不起作用,我們應該把 <%@ page contentType=」text/html;charset=UTF-8″ %>標籤放在頁面的第一行。例如下面的程式碼片斷:
<%@ page contentType="text/html;charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> </head> ...
結果顯示如下: