2012-06-14 2 views
2

클래스 경로에서 속성 파일을로드하는 f : loadBundle이 있습니다. 나중에 f : loadBundle을 사용하는 동안 javax.el.PropertyNotFoundException ...이 스펙이 올바르게 구현되고 있습니까?

<f:loadBundle basename="com.xxx.ui.messages" var="msg" /> 

, 나는 다음과 같은 구문을 사용하여 자원 번들에서 메시지를 사용하려고 해요 :

<h:outputText value="test message: #{msg.does_not_exist} --"/> 

그것은 JSF는 "을 (를) 찾을 수 없습니다"라는 메시지를 출력 것이 될하는 데 사용, 하지만 이제는 예외가 발생합니다. 사양이 변경 되었습니까, 아니면 올바른 동작입니까?

저는 JUEL 2.2.4와 함께 Mojarra 2.1.9를 EL 해결 프로그램으로 사용하고 있습니다. 여기에 스택 트레이스는 다음과 같습니다

javax.el.PropertyNotFoundException: /WEB-INF/xxx.xhtml @10,70 value="test message: #{msg.does_not_exist} --": Property 'does_not_exist' not found on type java.util.PropertyResourceBundle 
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) 
    at javax.faces.component.UIOutput.getValue(UIOutput.java:169) 
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205) 
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355) 
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164) 

편집 : 올바른 동작은 여기에서 확인할 수 있습니다 : http://javaserverfaces.java.net/nonav/docs/2.0/vdldocs/facelets/f/loadBundle.html 리터럴 문자열 ??? KEY는 ??? KEY 인지도에서 반환 말한다

(키 존재 대신

EDIT)를 사용해 MissingResourceException가 슬로우되는,지도에서 조회 : 같은 문제도 그래서 대답은 실제로 얼굴을 쳐다보고 JUEL

+0

이전에 다른 JSF 구현을 사용 했습니까? "쓰레기 반환"은 항상 바보 같은 행동입니다. – millimoose

+0

나는 올바른 행동이라고 확신한다 ... 좋든 나쁘 든. 여기를 참조하십시오 : http://stackoverflow.com/questions/6451215/jsf-how-to-remove-the-surrounding-if-message-not-found-in-messagebundle –

+0

확인 된 ??? 존재하지 않는다 ?? 여기에있는 문서에 따라 반환되어야합니다 : http://javaserverfaces.java.net/nonav/docs/2.0/vdldocs/facelets/f/loadBundle.html –

답변

3

을 제거한 후 ...에 대한 @millimoose하는 소품 뻥튀기 나는 올바른 길을 시작했다.

공지 사항은 규격이 말한다 :

리터럴 문자열 ??? KEY ??? 맵에서 KEY가 MissingResourceException이 던져지는 대신 키가 조회 된 인 Map에서 리턴됩니다.

하지만 내 스택 추적이 말한다 :

javax.el. PropertyNotFoundException : /WEB-INF/xxx.xhtml 10,70 값 @ = "테스트 메시지 : # {msg.does_not_exist} -" 'does_not_exist'속성 는

java.util.PropertyResourceBundle 유형을 찾을 수 없습니다

아, 가능한 버그!

이 클래스가 tomcat/lib에서 가져온 것을 알고 있으면 소스와 javadoc을 찾아 보았습니다 here. "getValue()"의 throws 선언에 주목하십시오.

이것은 사양 here과 상당히 대조적입니다.

그래서 tomcat/lib에서 el-api를 제거하고 spec jar (here)로 바꿔서 문제를 해결했습니다!

왜 Tomcat이 사양과 다른지는 나 외에 ... 그 미친 아파치들.