jsf 2.2获取属性文件的路径

时间:2014-01-23 11:28:50

标签: jsf jsf-2 path properties-file webcontent

我想从我的jsf 2.2项目中的一个属性文件中读出来。我使用eclipse kepler。

我尝试在包含de.exanple的文件夹src中的java-bean中使用它。 bean的文件名为PageServiceBean.java。

属性文件位于WEB-INF/resources/prop文件夹中。属性文件名为config.properties。

我已经读过我可以使用javax.faces.WEBAPP_RESOUCRES_DIRECTORY param名称和/WEB_INF/resoucres

之类的参数值更改web.xml文件中jsf 2.2中的resouce文件夹

但是我没有获得配置文件的路径。 你能告诉我在哪里可以得到路径名。我想我必须使用相对路径名。 你能帮我吗?

更新

我从你那里执行第二个代码片段:

private Properties getProperties() {
        Properties prop = new Properties();
        try {
            //load a properties file
            prop.load(new FileInputStream("config2.properties"));
        } catch(Exception e) {

        }
        return prop;
    }

    public void setProperty1(Integer value) {
        Properties prop = getProperties();
        prop.setProperty("ort", value.toString());
        try {
            prop.store(new FileOutputStream("config2.properties"), null);
            Properties prop2 = getProperties();                 
        } catch (IOException ex) {
            Logger.getLogger(PageServiceBean.class.getName()).log(Level.SEVERE, null, ex);

        }
    }

有效!我使用Properties prop3 = getProperties();来读取属性文件config2.properties。文件存储在eclipse主路径ECLIPSE_HOME = C:\elipse_jee\eclipse中。我可以将路径更改为特定路径,例如WEB_INF/resources

2 个答案:

答案 0 :(得分:0)

我会告诉你我的方法,但我没有尝试回答你的问题。

要在JEE应用程序中使用属性文件,我创建了一个无状态bean,它使用属性的getter和setter为应用程序的其余部分提供服务。只有这个EJB才能访问服务器中的属性文件,并使用java.util.Properties。

private Properties getProperties() {
    Properties prop = new Properties();
    try {
        //load a properties file
        prop.load(new FileInputStream("config.properties"));
    } catch(Exception e) {

    }
    return prop;
}

获得特定属性的访问方法后:

public Integer getProperty1() {
    Properties prop = getProperties();
    String value = prop.getProperty("myProperty1Name");
    if(value != null) {
        return Integer.parseInt(value );
    }
    return 0;
}

public void setProperty1(Integer value) {
    Properties prop = getProperties();
    prop.setProperty("myProperty1Name", value.toString());
    try {
        prop.store(new FileOutputStream("config.properties"), null);
    } catch (IOException ex) {
        Logger.getLogger(PropertiesManager.class.getName()).log(Level.SEVERE, null, ex);
    }
}

在这种方法中,如果文件不存在,则会创建该文件。但是,属性的​​默认值将是硬编码的。对于这种方法,放置文件的位置并不重要。实际位置取决于您的JEE服务器配置,域配置,应用程序部署文件等。

答案 1 :(得分:0)

ServletContext#getResourceAsStream()及其JSF委托人ExternalContext#getResourceAsStream()提供了Web内容资源。所以,这应该做:

ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
prop.load(ec.getResourceAsStream("/WEB-INF/resources/prop/config2.properties"));

另见: