是否有一种简单的方法可以在JSF配置.xml文件中指定(例如,faces-config.xml,web.xml或applicationContext.xml),我想从外部检索配置的某些值。属性文件?是可以使用JNDI或类似的东西吗?
例如:
<something>
#{brilliant-code-that-retrieves-values-from-.properties-file}
</something>
提前致谢。
答案 0 :(得分:1)
是的;在JSF中,它使用Resource Bundles完成。
香草实施
从您的花园种类.properties
文件
currency.symbol = "$"
currency.name = "dollar"
在 faces.config.xml 文件中定义资源包
<resource-bundle>
<base-name>com.you.resources.info</base-name>
<var>paymentInfo</var>
</resource-bundle>
请参阅faces-config.xml中的资源包(由上下文作为托管对象处理)。请记住,faces-config.xml文件也处理EL;对于所有意图和目的,你放在那里的任何EL都会像在视图中一样进行扫描:
<managed-bean>
<managed-bean-name>YourManagedBean</managed-bean-name>
<managed-bean-class>
com.you.app.BeanClass
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>currencyName</property-name>
<value>#{paymentInfo['currency.name']}</value>
</managed-property>
</managed-bean-name>
</managed-bean>
加载在弹簧上下文中配置的属性文件
Spring使用util
命名空间(xmlns:util="http://www.springframework.org/schema/util"
)提供开箱即用的属性文件加载。使用相同的配置文件:
在applicationContext.xml中定义一个配置器
<util:properties id="paymentInfo" location="classpath:com/you/resources/info/payment-info.properties" />
您可以像使用faces-config.xml或applicationContext.xml
#{paymentInfo}
醇>
答案 1 :(得分:1)
对于web.xml:
只需在其中放置一个上下文参数
<context-param>
<param-name>something</param-name>
<param-value>#{brilliant-code-that-retrieves-values-from-.properties-file}</param-value>
</context-param>
以您喜欢的任何方式在您的代码中检索该参数,例如通过bean中的CDI,然后将检索到的String
作为表达式进行评估。例如。与
@Inject
private ServletContext context;
public MySomething getMySomething() {
final String mySomethingString = context.getInitParameter("something");
final ELContext elCtx = FacesContext.getCurrentInstance().getELContext();
(MySomething) mySomething = (MySomething) child.getValueExpression().getValue(elCtx);
return mySomething;
}
答案 2 :(得分:0)
对不起伙计们,但这就是我追求的目标。我将学会下次更好地搜索。