对IFramePortlet进行超级分类时出现liferay错误
在开发liferay portlet时,如果我在portlet xml中的portlet类标记中使用对IFramePortlet进行超级分类时出现liferay错误,iframe,liferay,Iframe,Liferay,在开发liferay portlet时,如果我在portlet xml中的portlet类标记中使用IFramePortlet(com.liferay.portlet.iframe.IFramePortlet) 这样的错误- Registering portlets for gospel-for-asia-portlet 06:08:00,712 ERROR [localhost-startStop-6][PortletBagFactory:411] java.lang.ClassNotFo
IFramePortlet(com.liferay.portlet.iframe.IFramePortlet)
这样的错误-
Registering portlets for gospel-for-asia-portlet
06:08:00,712
ERROR [localhost-startStop-6][PortletBagFactory:411] java.lang.ClassNotFoundException: com.liferay.portlet.iframe.IFramePortlet
(sometimes NoClassDefFoundError happens)
注册非建筑时发生此错误。为此,我使用了portal impl.jar
添加了外部jar
该源代码显示在github上。我没有改变任何事情
我为这个问题挣扎了几天。任何线索都会受到欢迎。
谢谢。您不能将portal impl.jar
添加到自定义portlet中。这就是问题所在:IFramePortlet
是portal impl.jar
的一部分,因此它是Liferay实现的一部分。您没有从插件访问此类的权限。如果您想要它,您必须获得源代码并自己实现它
添加
portal impl.jar
将再次尝试初始化所有类型的门户基础结构。另外,您不希望仅仅为了一个微不足道的portlet实现而依赖于这么大的库 是的,你的意见一定是正确的。实施自己必须是最好的方式。但事实上,我只是个初学者。此外,我还不明白为什么我只是使用已经完成的实现会出现问题。正如您所知,重用和继承是OOP的优点。我在portlet-impl.jar中使用com.liferay.portlet.iframe.util没有问题。但一旦我将portlet.xml中的portlet类更改为com.liferay.portlet.iframe.IFramePortlet,它就会开始抛出错误。但开箱即用的iframe源代码没有问题。我相信像您这样的专家一定知道原因和方法。portal-impl.jar的问题不在单个类中,而是在初始化过程(spring)附带的2900万额外代码中,每个appserver不应该运行两次。我不关心为什么在一开始添加依赖项是错误的情况下使用该类不会起作用。如果你需要的话,复制这个类-问题解决了。我明白了。我真的很感谢你的帮助。但实际上我复制了包括IFramePortlet在内的类,但它们与其他文件有依赖性,我添加了一个又一个相关文件,最后放弃了@嗯,有时候你不得不停止复制。请记住,Liferay作为一个平台,必须具有最大的灵活性-例如,所有内容都必须是可配置的。相反,如果您为自己的用例实现,那么您可以获得更少的灵活性、更多的简单性,从而获得更好的可维护性。我假设编写一个简单的iframeportlet不需要超过一个小时(这已经很多了)。在另一个小时内添加一些调整和额外内容。但是,如果您想要有史以来最通用的IFrame,您需要做一些事情。无论如何,我们正在使用portlet配置值实现自动登录。我们发现,IFramePortlet调用proxy.jsp。并将登录信息传递给iframe。现在我们自己实现这个功能,没有捷径。