Liferay переопределяет JSONAction с помощью хука

В Liferay есть функция изменения действия Struts с помощью простого крючка. Однако я пытаюсь переопределить метод getJSON RateEntryAction.

Вариант использования: мне нужен общий положительный балл и общий отрицательный балл вместо среднего балла, который обеспечивает компонент рейтинга Liferay OOTB.

У меня уже есть необходимые методы, доступные в Liferay API, для получения общих положительных и отрицательных оценок. Я создал собственный тип, такой как «звезды» и «голоса», чтобы написать свою необходимую логику в крючке. Затем я планировал переопределить действие struts, представленное /portal/rate_enty, чтобы переопределить метод и добавить отрицательные и положительные голоса в json, который уже возвращается.

Но RateEntryAction (который является исходным классом) расширяет JSONAction и переопределяет метод getJSON. Можно ли переопределить только метод getJSON с помощью хука действия struts?


person Sandeep Nair    schedule 26.10.2015    source источник


Ответы (3)


Я вижу этот класс действия в struts-config.xml, так что это действие Struts. Это путь, который вы можете попытаться переопределить.

<action path="/portal/rate_entry" type="com.liferay.portal.action.RateEntryAction" />

Я бы попытался переопределить этот путь и посмотреть, можно ли поместить туда вашу логику.

RateEntryAction расширяется от JSONAction , а этот — от org.apache.struts.action.Action , который является тем же классом, что и PortletAction.

Надеюсь, это поможет

person joaco1977    schedule 26.10.2015
comment
Это то, что я сделал ранее. Но getJson нельзя переопределить. Мне пришлось переопределить метод выполнения - person Sandeep Nair; 27.10.2015

Согласно моим исследованиям, мы можем подключать только подклассы com.liferay.portal.struts.PortletAction, да, JSONAction также расширяет класс org.apache.struts.action.Action так же, как PortletAction, но liferay позволяет подключать только те классы, которые относятся к классу PortletAction, не исключая этого.

person Ashish Dadhich    schedule 26.10.2015

Поскольку RateEntryAction не является действием Struts, вы не можете перегрузить его хуком действия Struts. Я не знаю какого-либо способа переопределить его, поэтому я думаю, что вам придется либо использовать ext, либо ввести совершенно новую функцию JSON API и подключить все места в Liferay, которые ссылаются на исходную реализацию. перейти к вашей реализации.

Я подозреваю, что в этом случае плагин ext будет проще поддерживать. Кто-нибудь, поправьте меня, если я ошибаюсь.

person Olaf Kock    schedule 26.10.2015
comment
Фактический RateEntryAction расширяет JSONAction, который расширяет StrutsAction, поэтому технически RateEntryAction является действием Struts. - person Sandeep Nair; 27.10.2015
comment
Ой, извините. Я пропустил имя пакета Action и отвлекся на косвенность, тайно предположив не то. Плохо, извините, что ввела вас в заблуждение. Похоже, @Joaco1977 нашел ответ, проголосовав за него. - person Olaf Kock; 27.10.2015