2013-12-17 32 views
2

我試過這個映射,JSF就是找不到它。我們可以在JSF應用程序的WEB-INF下存儲messages.properties嗎?

<application> 
    <resource-bundle> 
     <base-name>/WEB-INF/i18/messages</base-name> 
     <var>msg</var> 
    </resource-bundle> 
</application> 

我看過的所有例子都將messages.properties放在Java Source文件夾中。有些人使用軟件包名稱,有些則不使用 - 這幾乎就像使用空白軟件包名稱一樣。 JSF迫使我們在Java Source下存儲資源包?

回答

3

這不是特定於JSF的。這是特定於ResourceBundle API。 Bundle按規範通過調用者的類加載器加載完整的基本名稱。從javadoc(重點煤礦):

getBundle

public static final ResourceBundle getBundle(String baseName)

使用指定的基本名稱,默認的語言環境,和調用者的類加載器獲取資源包。 [...]

參數:

baseName - 資源包,一個完全合格的類名

[...]

在幕後的基本名稱它使用ClassLoader#getResourceAsStream()來獲得類路徑資源的InputStream

/WEB-INF文件夾不是類路徑的一部分。它是網絡內容的一部分。 Web內容資源僅通過ServletContext#getResourceAsStream()以編程方式可用,並且通過ExternalContext#getResourceAsStream()固有地位於JSF中。您當然可以在自定義的ResourceBundle.Control中加載資源作爲Web內容資源,但實際上並不建議您在沒有任何有效技術原因的情況下采取與標準不同的做法。

只需將這些資源按通常的方式放入類路徑即可。將它們放入網絡內容毫無意義。

相關問題