2013-07-01 4 views
1

아마 아직하지만 난 그게 자신을 작동하도록 관리 didnt가에 answred 된이 질문에 ... 을 Liferay 포틀릿과 상대 경로

는 내가하는 Liferay 포틀릿 가지고 있고 일부 config.xml 파일을 읽을하려고 할 때이 포틀릿 초기화 (재배포). 그러나 Java에서 포틀릿에 대한 상대적 (또는 절대적인) 경로를 얻는 것 같습니다. This question는 문제의 종류에 가까웠지만 URL은 더 이상 작동하지 않습니다 ...

문제 AFTER 방법에

String path = getPortletContext().getRealPath("someDirectoryExample"); 

는 초기화했다, 작동,하지만 난 (= 초기화 단계에서) 포틀릿 생성자 내에서 그것을하고 싶습니다. 이것은, 그러나,이 매우 긴 예외 행진 종료 :

09:43:43,905 INFO [STDOUT] Caused by: java.lang.IllegalStateException: Config is null, please ensure that your init(config) method calls super.init(config) 

09:43:43,905 INFO [STDOUT]  at javax.portlet.GenericPortlet.getPortletContext(GenericPortlet.java:463) 

09:43:43,905 INFO [STDOUT]  at com.logic.PortletVisual.<init>(PortletVisual.java:23) 

09:43:43,905 INFO [STDOUT]  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
... 

난 그냥 docroot를 또는 다른 디렉토리에 어딘가에 XML 파일을 넣고 상대 경로를 사용하지만, 자바 클래스가 한 수 있다면 그것은 완전히 확인 될 것 어디서나 파일을 복사해도 파일을 찾을 수 없습니다 ... (기본 경로는 서버의 bin 디렉토리입니다 - JBossAS,하지만이 파일을 내 portelt 디렉토리에 보관하고 싶습니다).

팁 주셔서 감사합니다!

편집 : 예외적으로 혼동하지 마십시오. 생성자에서 getRealPath() 함수를 호출하려고하지 않으면 모든 것이 잘 작동합니다!

답변

2

우선 "The Portlet Constructor"는 "init phase"가 아니고 init()은 "init phase"입니다.

또한 getRealPath가 실제로 의미있는 값을 반환한다는 것을 아무도 보장하지 않는다는 점을 유의하십시오 (its javadoc 참조). 예외에서 제공하는 메시지는 init() 코드가 먼저 super.init()을 호출하고 프레임 워크가 portletContext를 설정했다고 가정해야한다고 제안합니다.

+0

충분히 나에게 이것을 명확하게 해주셔서 감사합니다. 그러나 포틀릿 생성자에서 XML 파일과 같은 리소스에 액세스하는 방법이 있습니까? 그렇다면 어떻게해야합니까? 그렇지 않다면 대안이 있습니까? 이것은 내가 가장 고민하는 것이고 나는 이것에 대한 자습서를 발견하지 못했습니다 ... 또한이 예외는 생성자에서 경로를 얻으 려 할 때만 발생합니다. 다른 모든 것들은 잘 작동합니다! – Smajl

+2

생성자에서 모든 종류의 농구를 수행해야하는 이유는 무엇입니까? 라이프 사이클 문서에는 init()이 다른 의미있는 동작보다 먼저 호출된다는 것이 명확히 명시되어 있습니다. 당신은 프레임 워크를 사용하고 있습니다 - 그 프레임 워크의 기본 작동 모드를 사용하십시오. 그것은 당신의 삶을 훨씬 더 쉽게 만들어 줄 것이지만 더 중요한 것입니다 : 프레임 워크에 대한 표준 가정을 밝히고 그들이 존중한다고 가정한다면 앞으로의 모든 유지 보수 담당자의 삶을 훨씬 쉽게 만들어 줄 것입니다. –

+0

네가 맞다.이 모든 "포틀릿"에 매우 익숙하다 :-) 나는 init() 함수에서 그렇게하려고 시도 할 것이다. 내 문제에 대해 더 잘 작동 할 getRealPath()와 동일한 것이 있는지 알고 있습니까? – Smajl