簡體   English   中英

將應用程序設置放在JSF中的位置

[英]Where to put application settings in JSF

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

  1. web.xml
  2. Faces-config.xml中具有<resource-bundle>配置的屬性文件
  3. 屬性文件,並根據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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM