4

src/main/resources在我的 JSF 项目中放置了一个属性文件。

我该如何处理它?我知道 EL 在支持 bean 中不起作用。

注意:该文件位于src/main/resources- NOTsrc/main/webapps/resources中,因此以下内容不起作用:

FacesContext context = FacesContext.getCurrentInstance();
File value = context.getApplication().evaluateExpressionGet(context, "#{resource['resources:email.properties']}", File.class);
4

1 回答 1

8

它因此在类路径中。你可以用它ClassLoader#getResourceAsStream()InputStream摆脱它。假设这src是类路径根并且main/resources是包:

InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("main/resources/foo.properties");
Properties properties = new Properties();
properties.load(input);
// ...

或者,如果它应该是特定于 webapp 的,因此不应该被类路径中具有更高类加载优先级的同一路径上的文件覆盖(例如,在 appserver 的 lib 或 JRE 的 lib 中),然后使用ExternalContext#getResourceAsStream()反而。

InputStream input = FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("main/resources/foo.properties");
Properties properties = new Properties();
properties.load(input);
// ...

至于#{resource}语法,这确实是专门针对放置在/resources公共 Web 内容文件夹中的 CSS/JS/image 资源的。另请参阅如何在 Facelets 模板中引用 CSS / JS / 图像资源?

于 2012-05-14T19:49:50.673 回答