如何从.xml配置文件(JSF)引用Java .properties文件?

时间:2015-03-30 07:05:53

标签: java xml spring jsf jsf-2

是否有一种简单的方法可以在JSF配置.xml文件中指定(例如,faces-config.xml,web.xml或applicationContext.xml),我想从外部检索配置的某些值。属性文件?是可以使用JNDI或类似的东西吗?

例如:

<something>
#{brilliant-code-that-retrieves-values-from-.properties-file}
</something>

提前致谢。

3 个答案:

答案 0 :(得分:1)

是的;在JSF中,它使用Resource Bundles完成。

香草实施

  1. 从您的花园种类.properties文件

    开始
    currency.symbol = "$"
    currency.name = "dollar"
    
  2. faces.config.xml 文件中定义资源包

    <resource-bundle>
        <base-name>com.you.resources.info</base-name>
        <var>paymentInfo</var>
    </resource-bundle> 
    
  3. 请参阅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>
    
  4. 加载在弹簧上下文中配置的属性文件

    Spring使用util命名空间(xmlns:util="http://www.springframework.org/schema/util")提供开箱即用的属性文件加载。使用相同的配置文件:

    1. 在applicationContext.xml中定义一个配置器

       <util:properties id="paymentInfo" location="classpath:com/you/resources/info/payment-info.properties" />
      
    2. 您可以像使用faces-config.xml或applicationContext.xml

    3. 中的#3}一样使用bean #{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)

对不起伙计们,但这就是我追求的目标。我将学会下次更好地搜索。

How to add Properties to an Application Context