我想知道什麼是在JSF中放置應用程序範圍預置的首選位置。我看到3個選項:將應用程序設置放在JSF中的位置
- 的web.xml
- 性能與
<resource-bundle>
配置在faces-config.xml文件 - 屬性文件,並用它每
java.util.Properties
我寧願NR。 2,因爲它似乎是最直接和最容易使用的。但我不確定這是否好,因爲一般情況下,我認爲<resource-bundle>
計劃用於本地化的消息,而不是用於應用程序範圍的設置。
我想知道什麼是在JSF中放置應用程序範圍預置的首選位置。我看到3個選項:將應用程序設置放在JSF中的位置
<resource-bundle>
配置在faces-config.xml文件java.util.Properties
我寧願NR。 2,因爲它似乎是最直接和最容易使用的。但我不確定這是否好,因爲一般情況下,我認爲<resource-bundle>
計劃用於本地化的消息,而不是用於應用程序範圍的設置。
選項#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。
的web.xml
我猜想你的意思是<context-param>
?這通常用於基於servlet /過濾器的第三方庫(JSF API/impl,PrimeFaces,OmniFaces,Jersey等)的配置參數。
性質隨
<resource-bundle>
配置文件中faces-config.xml
這通常用於JSF頁面的定位,即能夠切換到完全不同的語言站點範圍。
屬性文件,並使用它每java.util.Properties
這通常是用於名稱=值對可以表示相同的本地化文本和配置設置任何東西。
你看,這裏並沒有真正的「我該用哪個」這種情況。 「我應該什麼時候使用它」這個問題比較合適。答案是最終,只需使用正確的工具來完成這項工作。