7

我正在对 Liferay Intallation 附带的本地 Liferay portlet 进行更改。如何通过钩子或类似方法将函数更改为我自己的实现?

我已经阅读了如何制作前置条件和后置条件以及如何制作接口的新实现,但我不知道如何在我想要保持原来状态的 portlet 中的随机类中替换随机函数。

4

1 回答 1

15

有几种方法可以修改本地 Liferay portlet 的功能。这是一个快速概述。

大多数挂钩功能通过位于 /docroot/WEB-INF 目录中的 liferay-hook.xml 文件进行描述。以下是最常用的方法。

自定义 JSP

在 liferay-hook.xml 文件中,将以下子项添加到<hook/>

<custom-jsp-dir>/META-INF/custom_jsps</custom-jsp-dir>

该元素定义了您要放置要覆盖的 JSP 的位置。例如,您可能希望在以下位置为 Document Library portlet 重写 view.jsp:

[custom-jsp-dir]/html/portlet/document_library/view.jsp

模型监听器

对于这个,您必须定义一个通常存储在的 portal.property 文件,

/docroot/WEB-INF/src/portal.property

并告诉liferay-hook.xml它的位置。以下是上述的示例,

<portal-properties>portal.properties</portal-properties>

例如,如果您想监听 User 的变化,您可以在属性中写入,

value.object.listener.com.liferay.portal.model.User=com.my.example.UserListener;

格式如下,

value.object.listener.[class-to-listen]=[my-listener-class]

你的班级应该实现com.liferay.portal.model.BaseModelListener.

在这里,您可以收听诸如 Add、Update、Remove 等事件。

扩展\覆盖服务

这里有一个类似的故事,在liferay-hook.xml元素中<hook />添加

<service>
    <service-type>com.liferay.portal.service.UserService</service-type>
    <service-impl>my.example.service.UserServiceImpl</service-impl>
</service>

在这里,您的实现应该为特定服务扩展正确的包装类。例如,上面的例子是

com.liferay.portal.service.UserServiceWrapper;

您现在应该能够覆盖 UserService 的所有公共方法,例如updateUser(..).

Struts 动作的自定义

(仅适用于 Liferay 6.1 版本)

以与扩展服务非常相似的方式,定义元素<hook />

<struts-action>
    <struts-action-path>/message_boards/view</struts-action-path>
    <struts-action-impl>my.example.action.SampleViewAction</struts-action-impl>
</struts-action>

你需要扩展,

com.liferay.portal.kernel.struts.BaseStrutsAction

并且您将有权访问该请求并可以执行自定义操作。与自定义 JSP 结合使用非常强大。

祝你好运!

请务必检查与您使用的 Liferay 版本的兼容性。

如果您需要更多控制权,则需要使用 ext-plugin。

于 2011-07-29T17:26:33.050 回答