天天看點

資源檔案查找順序

之是以說Struts 2.0的國際化更靈活是因為它可以能根據不同需要配置和擷取資源(properties)檔案。在Struts 2.0中有下面幾種方法:

使用全局的資源檔案。這适用于遍布于整個應用程式的國際化字元串,它們在不同的包(package)中被引用,如一些比較共用的出錯提示;

使用包範圍内的資源檔案。做法是在包的根目錄下建立名的package.properties和package_xx_XX.properties檔案。這就适用于在包中不同類通路的資源;

使用Action範圍的資源檔案。做法為Action的包下建立檔案名(除檔案擴充名外)與Action類名同樣的資源檔案。它隻能在該Action中通路。如此一來,我們就可以在不同的Action裡使用相同的properties名表示不同的值。例如,在ActonOne中 title為“動作一”,而同樣用title在ActionTwo表示“動作二”,節省一些命名工夫;

使用<s:i18n>标志通路特定路徑的properties檔案。在您使用這一方法時,請注意<s:i18n>标志的範圍。在<s:i18n name="xxxxx">到</s:i18n>之間,所有的國際化字元串都會在名為xxxxx資源檔案查找,如果找不到, Struts 2.0就會輸出預設值(國際化字元串的名字)。

假設我們在某個ChildAction中調用了getText("user.title"),Struts 2.0的将會執行以下的操作:

查找ChildAction_xx_XX.properties檔案或ChildAction.properties;

查找ChildAction實作的接口,查找與接口同名的資源檔案MyInterface.properties;

查找ChildAction的父類ParentAction的properties檔案,檔案名為ParentAction.properties;

判斷目前ChildAction是否實作接口ModelDriven。如果是,調用getModel()獲得對象,查找與其同名的資源檔案;

查找目前包下的package.properties檔案;

查找目前包的父包,直到最頂層包;

在值棧(Value Stack)中,查找名為user的屬性,轉到user類型同名的資源檔案,查找鍵為title的資源;

查找在struts.properties配置的預設的資源檔案,參考例1;

輸出user.title。

繼續閱讀