我有一个高度可配置的JSf2 Web应用程序。我需要能够将位于配置文件中的属性(类路径中的config.properties)传递给使用XML配置声明的jsf 2.0 managed beabs。 这是一个例子:
<managed-bean>
<managed-bean-name>myBean</managed-bean-name>
<managed-bean-class>${config.myBean.class}</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
<managed-property>
<property-name>property1</property-name>
<value>#{config.myBean.property1}</value>
</managed-property>
<managed-property>
<property-name>property2</property-name>
<value>#{config.myBean.property2}</value>
</managed-property>
</managed-bean>
我的问题是如何从config.properties中访问这些值,并让JSF正确创建bean。我知道我可以在春天使用property-placeholder做到这一点。
<context:property-placeholder location="classpath:/config/config.properties" />
有没有办法在JSF 2.0中执行此操作?有没有其他解决方案可以做我想做的事情?
请帮忙!! 。
答案 0 :(得分:1)
JSF提供了一个非常强大的属性文件管理机制,它只比spring提供的设置稍微复杂一些。加载属性文件(或在JSF中调用的资源包)
在<resource-bundle/>
<application/>
元素下定义faces-config.xml
<application>
<resource-bundle>
<base-name>
com.me.resources.messages
</base-name>
<var>
msg
</var>
</resource-bundle>
</application>
其中<base-name>
指的是包含/属性文件的包/目录结构,<var>
指的是您将用于访问应用程序文件中属性的引用变量。确保您在Web应用程序中可以访问该目录结构。我的建议是将它存储在常规的Java包中并与您的应用捆绑在一起。
您现在可以在托管bean中引用您的属性
<h:outputText value="#{msg['messages.error']}" />
并在您的托管bean中
ResourceBundle securityBundle = ResourceBundle.getBundle("com.me.resources.messages");
String errorMessage = securityBundle.getString("messages.error");