1

我有一个高度可配置的 JSf2 Web 应用程序。我需要能够将位于配置文件(类路径中的 config.properties)中的属性传递给使用 XML 配置声明的 jsf 2.0 托管 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。我知道我可以在春天使用属性占位符来做到这一点。

<context:property-placeholder location="classpath:/config/config.properties" />

有没有办法在 JSF 2.0 中做到这一点?是否有另一种解决方案来做我想做的事情?

请帮忙 !!.

4

1 回答 1

1

JSF 提供了一个非常健壮的属性文件管理机制,它只比 spring 提供的设置稍微多一些。加载属性文件(或在 JSF 中调用的资源包)

  1. 在 a 中的元素<resource-bundle/>下定义a<application/>faces-config.xml

    <application>
        <resource-bundle>
           <base-name>
              com.me.resources.messages
           </base-name>
           <var>
               msg
           </var>
       </resource-bundle>
    </application>
    

    Where<base-name>指的是您拥有属性文件的包/目录结构,并<var>指的是您将用于访问应用程序中文件中的属性的引用变量。确保您可以在 Web 应用程序中访问该目录结构。我的建议是将其存储在常规的 java 包中并与您的应用程序捆绑在一起。

  2. 您现在可以在托管 bean 中引用您的属性

    <h:outputText value="#{msg['messages.error']}" />
    

    在您的托管 bean 中

     ResourceBundle securityBundle = ResourceBundle.getBundle("com.me.resources.messages");
     String errorMessage = securityBundle.getString("messages.error");
    
于 2012-11-16T04:17:11.613 回答