0

我想从我的 jsf 2.2 项目中的属性文件中读取。我使用日食开普勒。

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

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

我已经读到我可以在 web.xml 文件中更改 jsf 2.2 中的资源文件夹,其中包含javax.faces.WEBAPP_RESOUCRES_DIRECTORY参数名称和参数值,例如/WEB_INF/resoucres

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

更新

我执行您的第二个代码片段,如下所示:

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

4

2 回答 2

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 服务器配置、域配置、应用程序部署文件等。

于 2014-01-23T12:05:40.787 回答
0

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

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

也可以看看:

于 2014-01-24T09:07:11.863 回答