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



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

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

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

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

<标题>自定义jsp h1> 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
<标题>模型听众h1>
/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

在这里你可以听到事件,如添加,更新,删除,和其他一些。

<标题>扩展覆盖服务h1> 里也有类似的情况,在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 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.

相关内容

最新更新