2012-05-14 2 views
3

내 JSF 프로젝트에서 src/main/resources 내에 속성 파일을 넣었습니다.JSF 클래스 내의 리소스를 처리하는 방법은 무엇입니까?

어떻게 처리합니까? EL은 뒷받침 빈 내에서 작동하지 않는다는 것을 이해합니다.

참고 : 파일은 src/main/resources에 금지 - src/main/webapps/resources, 그래서 다음은 작동하지 않습니다

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

답변

7

그것은 클래스 경로에 따라서입니다. ClassLoader#getResourceAsStream()을 사용하면 InputStream을 얻을 수 있습니다. src 것을 가정하면 클래스 패스 루트이며, 그 main/resources 패키지입니다 : 다른 곳에서 동일한 경로에있는 파일에 의해 덮어 쓸 수 있어야되지 따라서 웹 애플리케이션에 구체적으로 생각하고 있어요 경우, 또는

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

클래스로드 우선 순위가 더 높은 클래스 경로 (예 : 응용 프로그램의 lib 또는 JRE의 lib). ExternalContext#getResourceAsStream()을 대신 사용하십시오. #{resource} 신택스로서는

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

이 공용 웹 콘텐츠 /resources 폴더에 CSS/JS/영상 자원을 실제로 구체적이다. 또한보십시오 How to reference CSS/JS/image resource in Facelets template?

+0

최고! BalusC에게 다시 한번 감사드립니다. – 8bitjunkie

+0

당신은 환영합니다 :) – BalusC

+0

TomCat 7 설치에 문제가 있다고 생각합니다. 실제로 Null Pointer Exception이 발생하고 예상대로 작동하지 않았습니까? 나는 선도적 인 슬래시를 시도하고 이것은 역시 작동하지 않습니다. 내 JSF 응용 프로그램은 일반적인 Maven 아키타 입을 가지고 있으며 파일 경로는 src/main/resources/foo.properties입니다. – 8bitjunkie

관련 문제