Java JSF中应用程序设置的放置位置
我想知道在JSF中放置应用程序范围的预设的首选位置是什么。我看到3种选择: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']}。使用
配置的属性文件java.util.properties
计划用于本地化消息,而不是应用程序范围的设置。选项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的内容