Как заменить функцию в собственном портлете Liferay - PullRequest
7 голосов
/ 29 июля 2011

Я изменяю собственный портлет Liferay, который поставляется с Liferay Intallation.Как я могу изменить функцию на мою собственную реализацию с помощью ловушки или аналогичного подхода?

Я читал, как создавать условия до и после и как создавать новую реализацию интерфейса, но я не знаю, какпросто заменить случайную функцию внутри случайного класса в портлете, который я хочу сохранить иначе, как это было изначально.

1 Ответ

15 голосов
/ 29 июля 2011

Существует несколько способов изменить функциональность собственного портлета Liferay.Вот краткий обзор.

Большинство подключенных функций описывается в файле liferay-hook.xml, расположенном в каталоге / docroot / WEB-INF.Вот наиболее распространенный метод.

Пользовательские JSP

В файле liferay-hook.xml добавьте следующий дочерний элемент в <hook/>

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

Этот элемент определяет местоположение, куда вы собираетесь поместить JSP, которые будут перезаписаны.Например, вы можете переписать 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 /> add

<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-плагин.

...