這個問題可能是answred上SO已經但是我沒有管理,使其工作自己...Liferay的門戶和相對路徑
我有一個Liferay的Portlet的,我想讀一些config.xml文件時,此portlet初始化(重新部署)。然而,我似乎無法得到從Java的portlet的相對(或絕對)路徑... This question是一種接近我正在解決的問題,但URL不工作了...
當我打電話
String path = getPortletContext().getRealPath("someDirectoryExample");
在出現問題後的方法
是初始化,它的工作原理,但我想這樣做的portlet的構造函數中(=在初始化階段)。然而,這結束與此極長例外連勝:
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)
...
這將是完全好的,如果我可以把XML文件的某處在文檔根目錄或任何其他目錄,並使用相對路徑,但Java類做沒有找到該文件,即使我將它複製到任何地方......(默認路徑是服務器的bin目錄 - JBossAS,但我想將此文件保存在我的portelt目錄中)。
感謝您的任何提示!
編輯:不要被例外困惑。當我不試圖在構造函數中調用getRealPath()函數時,一切工作正常!
夠公平的,謝謝你讓我更清楚。但是,有沒有辦法在portlet的構造函數中訪問資源(如XML文件)?如果是這樣,該怎麼辦?如果沒有,是否有其他選擇?這是最麻煩的事情,我還沒有找到關於這個的任何教程......此外,這種異常只發生在試圖在構造函數中獲取路徑時,所有其他事情都可以正常工作! – Smajl
爲什麼只有在構造函數中才能通過各種各樣的箍環?生命週期文檔明確指出init()將在任何其他有意義的操作之前被調用。您正在使用框架 - 使用該框架的默認操作模式。它會讓你的生活變得更容易,但更重要的是:如果他們能夠陳述框架的標準假設並假設他們得到尊重,它將使每個未來維護者的生活變得更加容易。 –
你是對的,我對所有這些「portlet」的東西都很陌生:-)我會嘗試在init()函數中做到這一點。你知道是否有一些等價於getRealPath()的功能對我的問題更好嗎? – Smajl