繁体   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