在liferay钩子中将自定义类导入JSP

时间:2013-04-10 10:32:20

标签: java maven liferay liferay-6

我使用钩子maven原型创建了一个liferay Hook插件,并覆盖了/html/common/themes/top_js-ext.jspf。在jsp我需要使用自定义功能,我有一个单独的jar。 jar是通过maven依赖项包含的,项目编译得很好,但是当我运行jsp时,门户网站找不到导入的类。

我该如何解决这个问题?我应该在liferay的lib目录中手动包含自定义jar吗?

如果我理解正确,那么JSP将在Hook插件的上下文之外执行,因此,自定义类不可用。有没有办法可以使用maven构建插件,以便门户找到我的自定义jar,而不必手动将它们移动到门户的类路径?

3 个答案:

答案 0 :(得分:2)

有多个选项可让您的自定义jar可用于运行时。首先,您可以考虑将它们放入plugin's WEB-INF/lib directory

  

[..]将JAR文件放在custom-jsps文件夹的WEB-INF / lib文件夹中[..]

另一种方法是create an ext plugin并将您的jar文件放入ext-lib / portal或ext-lib / global目录。完成deployment of the ext-plugin后,它们将可用于所有tomcat的webapps(在ext-lib / global的情况下)或门户网站(以tomcat / webapps / ROOT为单位)。

答案 1 :(得分:1)

获取jar类的java类文件并将其放在root / web-inf / lib中并重新启动它。

答案 2 :(得分:0)

JSP在门户网站的类加载器中执行,即使它是通过单独的Web应用程序(钩子)部署的。因此,您可以选择

  • 将您的自定义代码添加到Liferay,例如根本背景(如NivasKulukuri提到的)
  • 将您的自定义代码添加到全局类路径
  • 通过使用类加载桥访问您的自定义代码(例如,阅读有关PortletClassInvoker的内容)。 Liferay Servicebuilder在其类加载代理(以Clp结尾的类名)中使用此类方法来调用Web应用程序
  • 考虑替代实施,例如只需将所需的JS代码添加到自定义主题中即可。如果您有许多需要进行此更改的主题,请考虑引入common parent(我推荐这种方式作为最佳维护方式)

类加载桥的缺点是使用它们就像在反射中编程一样 - 你不喜欢常规做的事情。特别是你不想经常维护。