如何替换Liferay本机portlet上的函数

时间:2011-07-29 11:21:56

标签: liferay portlet liferay-6

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

我已经阅读了如何制作前置和后置条件以及如何创建接口的新实现,但我不知道如何在一个我要保留的portlet中替换随机类中的随机函数,否则它是原本。

1 个答案:

答案 0 :(得分:15)

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

大多数钩子功能都是通过位于/ docroot / WEB-INF目录中的liferay-hook.xml文件来描述的。这是最常用的方法。

Custom JSPs

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

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

此元素定义了要覆盖JSP的位置。例如,您可能希望在以下位置重写文档库portlet的view.jsp:

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

Model Listeners

对于这个,你必须定义一个通常存储在

的portal.property文件
/docroot/WEB-INF/src/portal.property

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

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

如果您想要收听用户中的更改,例如,您可以在属性中写入

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

在这里,您可以收听添加,更新,删除等活动。

Extend\Overwrite Service

此处类似的故事,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(..)

Customization of Struts Actions

(仅适用于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。