2015年8月21日 星期五

多個struts.xml 與 國際化訊息 (Struts2.3.x 三)

※多個struts.xml

一個專案常很多人開發,每個人都有一份struts.xml,所以會衝到,可以利用如下方法整合:
<struts>
    <include file="struts-a.xml" />
    <include file="struts-b.xml" />
</struts>

可以加很多的include,我的struts-a.xml複製後改名struts-b.xml居然可以run,
因為package的name,namespace,action的name完全一樣,
如果前端要求aaa.action,那到底是哪一個會起作用,所以這是不好的設計,所以多人開發時,必需先開會討論好名稱會比較好

※資源文件

之前的Action裡的顯示訊息是寫死的,必需把它搬出來
有三種方式:
.在同一個package下,和class名稱相同的properties
.同一個package共用的properties,必需叫package.properties
.全域的properties:前面兩個很少用,主要用這一個,要在struts.xml設定
.如果不按照以上的規則走,也不會有錯誤,只是錯誤訊息會變成key,
也就是super.getText()裡面的字

先測第一種同class名稱的
LoginAction.properties:
login.success=login success
login.failure=login fail

Action也要改:
@Override
public String execute() throws Exception {
    if (userName.equals("aaa") && userPassword.equals("123")) {
        displayMessage = super.getText("login.success");
        return ActionSupport.SUCCESS;
    } else {
        displayMessage = super.getText("login.failure");
        return Action.INPUT;
    }
}

測過後,將LoginAction.properties改成package.properties再測一次
最後在新增一個package,將properties剪過去,看有沒有用,我是測失敗,所以是正常的

※國際化

也就是改中文就顯示中文,改英文就顯示英文
瀏覽器可以改語言,我現在IE是用11版,和以前的版本的設定不太一樣
在src下新增properties,我是maven,所以是在src/main/java下
將剛剛的properties copy過來改,如下:
testMessage_en_US.properties:
login.success=login success
login.failure=login fail

testMessage_zh_TW.properties:
login.success=\u767b\u9304\u6210\u529f
login.failure=\u767b\u9304\u5931\u6557
中文自行用native2ascii.exe工具

加好後,struts.xml也要設定
首先先打開struts2-core-2.x.x.jar裡的org.apache.struts2,有個default.properties
找到struts.custom.i18n.resources,複製起來
然後在struts.xml加上constant
<struts>
    <constant name="struts.custom.i18n.resources" value="testMessage" />
    <package name="basicstruts2" extends="struts-default" namespace="/struts2">
        <action name="login" class="login.LoginAction" method="execute">
            <result name="success">/struts2/login.jsp</result>
            <result name="input">/struts2/login.jsp</result>
        </action>
    </package>
</struts>
value為zh_TW前面的名稱
constant也可以在src/main/java下新增一個叫struts.properties(一定要這樣取),然後將
struts.custom.i18n.resources=testMessage貼進去即可
也就是default.properties有兩種實作方式,個人感覺用struts.properties較好,
因為properties對應properties;而struts.xml就管其他的部分就好了
記得測試全部都是從action轉jsp哦

亂碼的部分,因為default.properties裡的struts.i18n.encoding,預設已經打開,而且是UTF-8,所以就不用設了

沒有留言:

張貼留言