1

Liferay には、単純なフックを使用して Struts アクションを変更する機能があります。ただし、RateEntryAction の getJSON メソッドをオーバーライドしようとしています。

ユースケースは、Liferay の OOTB 評価コンポーネントが提供する平均スコアではなく、合計肯定スコアと合計否定スコアが必要です。

正と負の合計スコアを取得するために、Liferay API ですぐに利用できる必要なメソッドが既にあります。「星」や「投票」のようなカスタムタイプを作成して、必要なロジックをフックに記述しました。次に、/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 から拡張され、これは PortletAction が拡張する同じクラスである org.apache.struts.action.Action から拡張されます。

この助けを願っています

于 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 アクションではないため、Struts アクション フックでオーバーロードすることはできません。私はそれをオーバーライドするためのフック可能な方法を認識していないため、ext を使用するか、まったく新しい JSON API 関数を導入して、元の実装を参照する Liferay 内のすべての場所をフックする必要があると推測されます。あなたの実装に行きます。

この場合、ext プラグインの方が維持しやすいと思います。私が間違っている場合は、誰かが私を修正してください。

于 2015-10-26T10:28:46.583 に答える