【发布时间】:2021-02-06 08:36:37
【问题描述】:
【问题讨论】:
【问题讨论】:
首先,您在谈论挂钩这一事实告诉我您来自 Liferay 6 或更早版本。忘记旧的模块类型(“war-style modules”),拥抱新的“jar-style modules”或“OSGi modules”,它们在基础上利用了 OSGi 方法和机制。最接近钩子功能的新模块类型是"module fragment"。
或者,如果您想创建一个模块来覆盖多个其他模块的 JSP(或覆盖 JSP 作为其主要目的的副作用),您可能需要查看"JSP Bags"。
不过,根据Liferay's "Introduction to Customizing JSPs",这两种方法都不鼓励,应作为最后的手段。
首选方法是使用Dynamic Includes(尽管它们仅在目标portlet 被编写为包含包含点时才有效)或Portlet Filters(基本上允许您以编程方式编辑对标准的请求和响应Portlet 类和 JSP)。
不过,如果您的目标是替换标准文档和媒体小部件的大部分 JSP(请记住:小部件仍然是 Portlet,它们只是在前端重命名),模块片段似乎仍然是最好的前进方式。
要识别正确的模块,请执行以下必要步骤。我将使用控制面板中的 DLAdmin portlet 作为示例来展示它:
<section class="portlet" id="portlet_com_liferay_document_library_web_portlet_DLAdminPortlet"> 的部分标签。com.liferay.document.library.web.portlet.DLAdminPortlet。在Liferay github repository 中搜索该课程。 (去那里,按T,输入类名,找到它的Java类源文件。如果多次点击,你也需要检查包路径。)src 文件夹的父文件夹。有一个bnd.bnd 文件。看看它,它会告诉你Bundle-SymbolicName。Bundle-SymbolicName 标识的模块创建模块片段。【讨论】: