1

我想知道在 JSF 中放置应用程序范围的预设的首选位置是什么。我看到 3 个选项:

  1. web.xml
  2. <resource-bundle>带有faces-config.xml中配置的属性文件
  3. 属性文件并使用它java.util.Properties

我更喜欢Nr。2,因为它似乎是最直接最容易使用的。但我不确定这是否好,因为总的来说,我认为<resource-bundle>是针对本地化消息而不是针对应用程序范围的设置。

4

2 回答 2

5

选项 #1 和 #2 的优点是您还可以通过 EL 轻松访问设置。使用选项#1,您可以执行#{initParam['keyUsedForContextParam']}. 使用选项#2,您可以使用资源包的正常方式#{rscBundleName['keyUsedInPropertiesFile']}。但正如您已经说过的:大多数时候您将使用它进行本地化,所以这会有点奇怪,但它会起作用。但是对于应用程序范围的设置,我认为带有自定义的 web.xmlcontext-params可能是更合适的方式。

如果要访问托管 bean 中的设置,则必须通过 FacesContext 访问设置。对于可能看起来像的选项#1 FacesContext.getCurrentInstance().getExternalContext().getInitParameter("keyUsedForContextParam");。这不是很好。

选项#3 当然也可以,但是您需要某种@ApplicationScoped实用程序 bean,它将从您的自定义文件中访问设置.properties。但这实际上不是一个很大的问题。您可以像这样通过 EL 访问设置#{settingsBean.get('keyUsedInPropertiesFile')}:这比例子更明显initParam。在您的托管 bean 中,您也可以SettingsBean以相同的方式注入并访问设置。最容易理解。

选项#3 也有一个不那么明显的优势。您可以实时重新读取设置。在 faces-config.xml 中定义的 web.xml 和资源包只会在启动时被读取。每次都可能重新读取 .properties 文件,您将SettingsBean能够即时更改设置(make it @RequestScoped)。bean 替代方案通常也更强大,例如,您可以定义默认设置,当您未在属性文件中定义任何值时应用这些设置等等。

我建议您使用选项#3。

于 2013-09-01T16:39:40.093 回答
4

web.xml

我想你的意思是<context-param>?这通常用于基于 servlet/filter 的 3rd 方库(JSF API/impl、PrimeFaces、OmniFaces、Jersey 等)的配置参数。


<resource-bundle>带有配置的属性文件faces-config.xml

这通常用于 JSF 页面的本地化,即能够在站点范围内切换到完全不同的语言。


properties 文件并根据 java.util.Properties 使用它

这通常用于名称=值对,它可以表示本地化文本和配置设置等任何内容。


你看,这里没有真正的“我应该使用哪个”案例。“我什么时候应该使用它”这个问题更合适。最终的答案是,只需为工作使用正确的工具。

于 2013-09-01T21:45:30.517 回答