Liferay使用钩子覆盖JSONAction

时间:2015-10-26 06:58:07

标签: liferay liferay-6.2

Liferay具有使用hook直接修改Struts Action的功能。但是我试图覆盖RateEntryAction的getJSON方法。

用例是我需要总得分和总得分而不是Liferay的OOTB评级组件提供的平均得分。

我已经在Liferay API中提供了必要的方法来获得总的正面和负面分数。我创建了一个自定义类型,就像" stars"和"投票"写下我必要的逻辑。然后我计划覆盖/ portal / rate_enty表示的struts动作来覆盖该方法,并在已经返回的json中添加负面和正面投票。

但是RateEntryAction(它是原始类)正在扩展JSONAction并覆盖getJSON方法。是否可以使用struts动作钩子覆盖getJSON方法?

3 个答案:

答案 0 :(得分:4)

我可以在struts-config.xml中看到这个动作类,所以它是一个Struts动作。 这是您可以尝试覆盖的路径。

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

我会尝试覆盖此路径,看看是否可以将逻辑放在那里。

RateEntryAction扩展自JSONAction,这个来自org.apache.struts.action.Action,它与PortletAction扩展的类相同。

希望这个帮助

答案 1 :(得分:2)

根据我的研究,我们只能挂钩 com.liferay.portal.struts.PortletAction 子类,Yeah JSONAction也扩展 org.apache.struts.action.Action class类似于PortletAction,但是liferay只允许那些属于PortletAction类的钩子类,除了它。

答案 2 :(得分:1)

由于RateEntryAction不是Struts Action,因此您无法使用Struts Action Hook重载它。我不知道有任何可以覆盖它的方法,因此我最好的猜测是你必须要去ext或者引入一个全新的JSON API函数并挂钩Liferay中所有引用它的地方原始实现现在转到您的实现。

我怀疑在这种情况下,一个ext插件将更容易维护。如果我错了,有人会纠正我。