[英]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.