2016-08-24 93 views
-2

我在本地文件系統中有一個屬性文件。 我已經使用了一個XHTML文件來創建一個UI。 在這個文件中,我已經硬編碼了UI元素的名稱。是否有任何方法從屬性文件中獲取這些名稱?從XHTML文件中的屬性文件中獲取值

+0

什麼「UI元素的名稱」是什麼?目前的答案假定國際化,它不是遠程看起來像「UI元素的名稱」。 – BalusC

+0

鑑於他最近的問題http://stackoverflow.com/questions/39098719/properties-file-in-java談論ResourceBundles我認爲(也許希望)我的假設是正確的 – PDStat

+0

UI元素的名稱意味着標籤 – vinayaka

回答

0

有幾個選項,假設你有在以下位置messages.properties

src 
    main 
     java 
     resources 
     com 
      example 
       messages.properties 

您可以使用在faces-config.xmlresource-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> 

您還可以使用<f:loadBundle>

<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> 
+0

我沒有我的屬性文件在我的classpath中。我有我的本地文件系統。我可以如何獲取它? – vinayaka

+0

編輯允許外部捆綁的答案 – PDStat