1

この質問はおそらくSOですでに回答されていますが、自分でうまく機能させることができませんでした...

Liferay ポートレットがあり、このポートレットの初期化 (再デプロイ) 時に config.xml ファイルを読み込もうとしています。ただし、Java からポートレットへの相対 (または絶対) パスを取得できないようです...この質問は、私が解決している問題に近いものでしたが、URL が機能しなくなりました...

電話すると

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)
...

xmlファイルをdocrootまたは他のディレクトリのどこかに置いて相対パスを使用できればまったく問題ありませんが、どこにでもコピーしてもJavaクラスはファイルを見つけられませんでした...(デフォルトのパスはbinディレクトリですサーバーの - JBossAS ですが、このファイルを自分の portelt ディレクトリに保持したいと思います)。

ヒントをありがとう!

編集:例外に混乱しないでください。コンストラクターで getRealPath() 関数を呼び出そうとしないと、すべて正常に動作します!

4

1 に答える 1

2

まず、「ポートレット コンストラクター」は「=init フェーズ」ではなく、init()は「init フェーズ」です。

さらに、 getRealPath が実際に意味のある値を返すことを保証する人は誰もいないことに注意してください - javadoc を参照してください。例外で指定したメッセージは、init()コードが最初に呼び出しsuper.init()、次にフレームワークが portletContext をセットアップしたと想定する必要があることを示唆しています。

于 2013-07-01T09:32:28.233 に答える