1

这个问题可能已经在 SO 上得到了回答,但我自己没有设法让它工作......

我有一个 Liferay Portlet,我正在尝试在该 Portlet 初始化(重新部署)时读取一些 config.xml 文件。但是,我似乎无法从 Java 获得 portlet 的相对(或绝对)路径......这个问题有点接近我正在解决的问题,但 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 文件放在 docroot 或任何其他目录中的某个位置并使用相对路径,那就完全没问题了,但是即使我将它复制到任何地方,java 类也找不到该文件......(默认路径是 bin 目录服务器的 - JBossAS,但我想将此文件保存在我的 portelt 目录中)。

感谢您的任何提示!

编辑:不要对异常感到困惑。当我不尝试在构造函数中调用 getRealPath() 函数时,一切正常!

4

1 回答 1

2

首先,“Portlet 构造器”不是“=init 阶段”,init()是“init 阶段”。

此外,请注意,没有人保证 getRealPath 实际上返回一个有意义的值 - 请参阅它的 javadoc。您在异常中给出的消息表明您的init()代码应该首先调用super.init(),然后假定框架确实设置了 portletContext。

于 2013-07-01T09:32:28.233 回答