如何处理JSF类中的资源?

时间:2012-05-14 19:43:21

标签: jsf properties resources classpath

我已将src/main/resources中的属性文件放在我的JSF项目中。

我如何处理它?我知道EL在辅助bean中不起作用。

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

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

1 个答案:

答案 0 :(得分:7)

因此它在类路径中。您只需使用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}语法,这确实专门用于放置在公共Web内容的/resources文件夹中的CSS / JS /图像资源。另请参阅How to reference CSS / JS / image resource in Facelets template?