我正在改变Liferay Intallation附带的本地Liferay portlet。如何通过钩子或类似的方法将函数更改为我自己的实现?
我已经阅读了如何制作前置和后置条件以及如何创建接口的新实现,但我不知道如何在一个我要保留的portlet中替换随机类中的随机函数,否则它是原本。
答案 0 :(得分:15)
有几种方法可以修改本机Liferay portlet的功能。这是一个快速概述。
大多数钩子功能都是通过位于/ docroot / WEB-INF目录中的liferay-hook.xml文件来描述的。这是最常用的方法。
在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
对于这个,你必须定义一个通常存储在
的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
。
在这里,您可以收听添加,更新,删除等活动。
此处类似的故事,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(..)
。
以与扩展服务非常相似的方式,定义<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。