【问题标题】:fetching the values from a property file inside a XHTML file从 XHTML 文件中的属性文件中获取值
【发布时间】:2016-08-24 11:12:35
【问题描述】:

我的本​​地文件系统中有一个属性文件。 我使用了一个 XHTML 文件来创建一个 UI。 在这个文件中,我对 UI 元素的名称进行了硬编码。有没有办法从属性文件中获取这些名称?

【问题讨论】:

  • “UI 元素的名称”到底是什么?当前的答案假设国际化,它看起来不像“UI元素的名称”。
  • 鉴于他最近的问题 stackoverflow.com/questions/39098719/properties-file-in-java 谈论 ResourceBundles,我认为(希望也许)我的假设是正确的
  • UI 元素的名称表示标签

标签: jsf


【解决方案1】:

有几个选项,假设您在以下位置有一个 messages.properties

src
   main
      java
      resources 
         com
            example
               messages.properties

您可以在faces-config.xml 中使用resource-bundle 标记使其适用于整个应用程序

<application>
   <locale-config>
        <default-locale>en</default-locale>
        <supported-locale>fr</supported-locale>
    </locale-config>
   <resource-bundle>
      <baseName>com.example.messages</baseName>
      <var>msgs</var>
   </resource-bundle>
</application>

然后可以像这样在您的 XHTML 中访问它(注意使用语言环境可以让您选择拥有 messages_fr.properties)

<f:view locale="en">
   #{msgs.keyName}
</f:view>
<f:view locale="fr">
   #{msgs.keyName}
</f:view>

你也可以使用&lt;f:loadBundle&gt;

<f:view locale="en">
   <f:loadBundle baseName="com.example.messages" var="msgs" />
   #{msgs.keyName}
</f:view>
<f:view locale="fr">
   <f:loadBundle baseName="com.example.messages" var="msgs" />
   #{msgs.keyName}
</f:view>

如果您需要将资源包放在外部,一种方法可能是以下方法。

在 web.xml 中设置包的绝对路径

<context-param>
    <param-name>bundlePath</param-name>
    <param-value>absolute path to your properties file</param-value>
</context-param>

创建自己的 ResourceBundle 类

package com.example;

import java.io.FileReader;

import java.util.Enumeration;
import java.util.ResourceBundle;
import java.util.PropertyResourceBundle;

import javax.faces.context.FacesContext;

public class MyBundle extends ResourceBundle {

    public MyBundle() throws FileNotFoundException {
        String configPath = FacesContext.getCurrentInstance().getExternalContext().getInitParameter("bundlePath")
        setParent(new PropertyResourceBundle(new FileReader(configPath)));
    }

    @Override
    public Object handleGetObject(String key) {
        return parent.getObject(key);
    }

    @Override
    public Enumeration<String> getKeys() {
        return parent.getKeys();
    }

}

照常在faces-config.xml注册

<resource-bundle>
    <bundleName>com.example.MyBundle</bundleName>
    <var>msgs</var>
</resource-bundle>

【讨论】:

  • 我的类路径中没有我的属性文件。我的本地文件系统中有它。如何获取它?
  • 编辑答案以允许外部捆绑
猜你喜欢
  • 2013-02-08
  • 2014-01-27
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
  • 2013-05-07
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多