1

Liferay 具有使用简单的钩子修改 Struts Action 的功能。但是我试图覆盖 RateEntryAction 的 getJSON 方法。

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

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

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

4

3 回答 3

4

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

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

我会尝试覆盖这条路径,看看是否可以把你的逻辑放在那里。

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

希望这有帮助

于 2015-10-26T14:40:43.260 回答
2

根据我的研究,我们只能挂钩com.liferay.portal.struts.PortletAction 子类,是的 JSONAction 也扩展了与 PortletAction 相同的org.apache.struts.action.Action类,但 liferay 只允许那些可挂钩的类属于 PortletAction 类不仅如此。

于 2015-10-26T11:21:39.807 回答
1

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

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

于 2015-10-26T10:28:46.583 回答