2013-09-01 42 views
1

我想知道什麼是在JSF中放置應用程序範圍預置的首選位置。我看到3個選項:將應用程序設置放在JSF中的位置

  1. 的web.xml
  2. 性能與<resource-bundle>配置在faces-config.xml文件
  3. 屬性文件,並用它每java.util.Properties

我寧願NR。 2,因爲它似乎是最直接和最容易使用的。但我不確定這是否好,因爲一般情況下,我認爲<resource-bundle>計劃用於本地化的消息,而不是用於應用程序範圍的設置。

回答

5

選項#1和#2的優點是您還可以通過EL輕鬆訪問設置。使用選項#1,您可以執行#{initParam['keyUsedForContextParam']}。使用選項#2,您可以使用資源包#{rscBundleName['keyUsedInPropertiesFile']}的常規方式。但正如你已經說過的那樣:大多數時候你會用它來進行本地化,所以它會有點奇怪,但它會起作用。但對於應用程序範圍的設置,我認爲自定義context-params的web.xml可能是更合適的方式。

如果您想訪問託管bean中的設置,則必須通過FacesContext訪問設置。對於可能看起來像FacesContext.getCurrentInstance().getExternalContext().getInitParameter("keyUsedForContextParam");的選項#1。這並不好。

選項#3當然也有效,但您需要某種@ApplicationScoped實用程序bean,它將訪問您自定義的.properties-文件中的設置。但這其實並不是一個很大的問題。你可以像這樣通過EL訪問設置:#{settingsBean.get('keyUsedInPropertiesFile')}。例如,這比initParam更明顯。在託管的bean中,您也可以注入SettingsBean並以相同的方式訪問設置。最容易理解。

選項#3也有一個不明顯的優勢。您可以實時重新讀取設置。在faces-config.xml中定義的web.xml和資源包只能在啓動時讀取。 SettingsBean可能會每次重新讀取.properties文件,您將能夠即時更改設置(使其成爲@RequestScoped)。 bean的替代方法通常也更加強大,例如,您可以定義在您的屬性文件中未定義任何值時適用的默認設置等等。

我建議你去選擇#3。

3

的web.xml

我猜想你的意思是<context-param>?這通常用於基於servlet /過濾器的第三方庫(JSF API/impl,PrimeFaces,OmniFaces,Jersey等)的配置參數。


性質隨<resource-bundle>配置文件中faces-config.xml

這通常用於JSF頁面的定位,即能夠切換到完全不同的語言站點範圍。


屬性文件,並使用它每java.util.Properties

這通常是用於名稱=值對可以表示相同的本地化文本和配置設置任何東西。


你看,這裏並沒有真正的「我該用哪個」這種情況。 「我應該什麼時候使用它」這個問題比較合適。答案是最終,只需使用正確的工具來完成這項工作。

相關問題