[英]Where to put application settings in JSF
我想知道在JSF中放置應用程序范圍預置的首選位置是什么。 我看到3個選項:
<resource-bundle>
配置的屬性文件 java.util.Properties
使用它 我更喜歡Nr。 2,因為它似乎是最直接,最容易使用的。 但是我不確定這是否好,因為通常我認為<resource-bundle>
是針對本地化消息而不是針對應用程序范圍的設置而設計的。
選項#1和#2的優點是您還可以通過EL輕松訪問設置。 使用選項#1,您可以執行#{initParam['keyUsedForContextParam']}
。 使用選項#2,您可以按照常規方式使用資源束#{rscBundleName['keyUsedInPropertiesFile']}
。 但是正如您已經說過的:在大多數情況下,您將使用它進行本地化,因此這有點奇怪,但它會起作用。 但是對於應用程序范圍的設置,我認為帶有自定義context-params
的web.xml可能是更合適的方法。
如果要訪問托管bean中的設置,則必須通過FacesContext訪問設置。 對於選項#1,可能看起來像FacesContext.getCurrentInstance().getExternalContext().getInitParameter("keyUsedForContextParam");
。 這不是很好。
選項#3當然也可以使用,但是您將需要某種@ApplicationScoped
實用程序bean,它將從您的自定義.properties
-file訪問設置。 但這實際上不是一個很大的問題。 您可以通過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等)的配置參數。
faces-config.xml
具有<resource-bundle>
配置的屬性文件
通常將其用於JSF頁面的本地化,即能夠在站點范圍內切換到完全不同的語言。
屬性文件,並根據java.util.Properties使用它
通常用於“名稱=值”對,該對可以表示任何內容,例如本地化文本和配置設置。
您會看到,這里實際上沒有“我應該使用”的情況。 “我什么時候應該使用它”這個問題更合適。 最終的答案是,只需使用正確的工具即可完成工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.