Java JSF中应用程序设置的放置位置

Java JSF中应用程序设置的放置位置,java,jsf,jsf-2,properties,Java,Jsf,Jsf 2,Properties,我想知道在JSF中放置应用程序范围的预设的首选位置是什么。我看到3种选择: web.xml 在faces-config.xml中具有配置的属性文件 属性文件,并按照java.util.properties 我更喜欢Nr.2,因为它似乎是最直接和最容易使用的。但我不确定这是否好,因为一般来说,我认为计划用于本地化消息,而不是应用程序范围的设置。选项1和#2的优点是,您也可以通过EL轻松访问设置。使用选项#1,您可以执行{initParam['keyUsedForContextParam']}。使用

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

  • web.xml
  • 在faces-config.xml中具有
    配置的属性文件
  • 属性文件,并按照
    java.util.properties
  • 我更喜欢Nr.2,因为它似乎是最直接和最容易使用的。但我不确定这是否好,因为一般来说,我认为
    计划用于本地化消息,而不是应用程序范围的设置。

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

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

    选项#3当然也可以工作,但您需要某种
    @ApplicationScoped
    实用程序bean,它将从自定义
    .properties
    -文件访问设置。但这其实不是什么大问题。您可以通过EL访问设置,如下所示:
    {settingsBean.get('keyUsedInPropertiesFile')}
    。例如,这比
    initParam
    更明显。在托管bean中,您还可以注入
    设置bean
    并以相同的方式访问设置。最容易理解

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

    我建议您选择选项3。

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

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

    选项#3当然也可以工作,但您需要某种
    @ApplicationScoped
    实用程序bean,它将从自定义
    .properties
    -文件访问设置。但这其实不是什么大问题。您可以通过EL访问设置,如下所示:
    {settingsBean.get('keyUsedInPropertiesFile')}
    。例如,这比
    initParam
    更明显。在托管bean中,您还可以注入
    设置bean
    并以相同的方式访问设置。最容易理解

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

    我建议你选择选项3

    web.xml

    我想你是说
    ?这通常用于基于servlet/filter的第三方库(jsfapi/impl、PrimeFaces、OmniFaces、Jersey等)的配置参数


    faces config.xml

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


    属性文件,并按照java.util.properties使用它

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


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

    web.xml

    我想你是说
    ?这通常用于基于servlet/filter的第三方库(jsfapi/impl、PrimeFaces、OmniFaces、Jersey等)的配置参数


    faces config.xml

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


    属性文件,并按照java.util.properties使用它

    这通常用于名称=值对,它可以表示任何类似本地化te的内容