使用钩子重写JSONAction的Liferay

使用钩子重写JSONAction的Liferay,liferay,liferay-6.2,Liferay,Liferay 6.2,Liferay的特性是使用直接向前的钩子修改Struts动作。然而,我试图覆盖RateEntryAction的getJSON方法 用例是我需要总的积极得分和总的消极得分,而不是Liferay的OOTB评级组件提供的平均得分 我已经在Liferay API中提供了必要的方法来获得总分。我创建了一个自定义类型,就像stars和vots一样,在hook中编写必要的逻辑。然后,我计划覆盖由/portal/rate_enty表示的struts操作,以覆盖该方法,并在已经返回的json中添加否定和肯定投票

Liferay的特性是使用直接向前的钩子修改Struts动作。然而,我试图覆盖RateEntryAction的getJSON方法

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

我已经在Liferay API中提供了必要的方法来获得总分。我创建了一个自定义类型,就像stars和vots一样,在hook中编写必要的逻辑。然后,我计划覆盖由/portal/rate_enty表示的struts操作,以覆盖该方法,并在已经返回的json中添加否定和肯定投票


但是原始类RateEntryAction正在扩展JSONAction并重写getJSON方法。是否可以使用struts操作钩子重写getJSON方法

由于RateEntryAction不是Struts操作,因此不能使用Struts操作挂钩重载它。我不知道有任何可挂接的方法来覆盖它,因此我的最佳猜测是,您要么使用ext,要么引入一个全新的JSON API函数,并将Liferay中所有引用原始实现的地方挂接到您的实现中


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

因为RateEntryAction不是Struts操作,所以不能用Struts操作挂钩重载它。我不知道有任何可挂接的方法来覆盖它,因此我的最佳猜测是,您要么使用ext,要么引入一个全新的JSON API函数,并将Liferay中所有引用原始实现的地方挂接到您的实现中


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

根据我的研究,我们只能钩住com.liferay.portal.struts.PortletAction子类,是的,JSONAction还扩展了org.apache.struts.action.action类,与PortletAction相同,但liferay只允许那些属于PortletAction类的可钩住类

根据我的研究,我们只能钩住com.liferay.portal.struts.PortletAction子类,是的,JSONAction还扩展了org.apache.struts.action.action类,与PortletAction相同,但liferay只允许那些属于PortletAction类的可钩住类,除此之外

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

<action path="/portal/rate_entry" type="com.liferay.portal.action.RateEntryAction" />
我会尝试覆盖这条路径,看看是否可以把你的逻辑放在那里

RateEntryAction从JSONAction扩展而来,这个从org.apache.struts.action.action扩展而来,它是PortletAction扩展的同一个类


希望这个帮助

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

<action path="/portal/rate_entry" type="com.liferay.portal.action.RateEntryAction" />
我会尝试覆盖这条路径,看看是否可以把你的逻辑放在那里

RateEntryAction从JSONAction扩展而来,这个从org.apache.struts.action.action扩展而来,它是PortletAction扩展的同一个类


希望这个帮助

实际的RateEntryAction扩展了JSONAction,它扩展了StrutsAction,所以从技术上讲RateEntryAction是struts Action哇,对不起。我错过了Action的软件包名称,被间接操作分散了注意力,秘密地假设了错误的东西。对不起,我的错误导了你。看起来@Joaco1977找到了答案,对那个进行了投票。实际的RateEntryAction扩展了JSONAction,而JSONAction扩展了StrutsAction,所以从技术上讲RateEntryAction是struts Action哇,对不起。我错过了Action的软件包名称,被间接操作分散了注意力,秘密地假设了错误的东西。对不起,我的错误导了你。看起来@Joaco1977找到了答案,投票选了那个。这是我之前做的。但是getJson不能被覆盖。我必须重写执行方法,这是我之前做的。但是getJson不能被覆盖。我必须重写execute方法