【问题标题】:Importing custom classes to JSP in liferay hook在 Liferay 挂钩中将自定义类导入 JSP
【发布时间】:2013-04-10 10:32:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: java maven liferay liferay-6


    【解决方案1】:

    有多个选项可让您的自定义 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 的形式出现)。

    【讨论】:

    • ext 插件似乎是最干净的方法。感谢您的反馈
    【解决方案2】:

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

    【讨论】:

    • 我一直在寻找更自动化的东西,这正是我试图避免的,因为它增加了部署过程的复杂性
    【解决方案3】:

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

    • 将您的自定义代码添加到 Liferay,例如根上下文(正如 NivasKulukuri 提到的)
    • 将您的自定义代码添加到全局类路径
    • 通过使用类加载桥访问您的自定义代码(例如,阅读有关 PortletClassInvoker 的信息)。 Liferay Servicebuilder 在其类加载代理(以 Clp 结尾的类名)中利用此类方法来跨 Web 应用程序调用
    • 考虑另一种实现方式,例如只需将所需的 JS 代码添加到您的自定义主题中。如果您有许多需要此更改的主题,请考虑引入common parent(我建议这种方式是最好的可维护方式)

    类加载桥的缺点是使用它们感觉就像在反射中编程——你不想经常做任何事情。尤其是你不想经常维护的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 2014-07-09
      • 2018-02-12
      • 2022-01-27
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多