我想知道在JSF中放置应用程序范围预设的首选位置是什么。我看到3个选项:
<resource-bundle>
的属性文件
java.util.Properties
我更喜欢Nr。 2,因为它似乎是最直接和最容易使用的。但我不确定这是否合适,因为总的来说我认为<resource-bundle>
是针对本地化消息而不是针对应用程序范围的设置。
答案 0 :(得分:5)
选项#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.xml和faces-config.xml中定义的资源包只能在启动时读取。 SettingsBean
每次都可能重新读取.properties文件,您可以即时更改设置(将其设为@RequestScoped
)。 bean替代方案通常也更强大,例如,您可以定义默认设置,当您未在属性文件中定义任何值时应用这些设置,等等。
我建议你选择#3选项。
答案 1 :(得分:4)
的web.xml
我认为你的意思是<context-param>
?这通常用于基于servlet / filter的第三方库(JSF API / impl,PrimeFaces,OmniFaces,Jersey等)的配置参数。
在
中配置<resource-bundle>
faces-config.xml
的属性文件
这通常用于JSF页面的本地化,即能够在站点范围内切换到完全不同的语言。
属性文件,并根据java.util.Properties
使用它
这通常用于名称=值对,它可以表示本地化文本和配置设置等任何内容。
你知道,这里并没有真正的“我应该使用哪种”案例。 “我应该何时使用它”的问题更合适。答案是最终的,只需使用合适的工具即可。