LiferayIntallationに付属しているネイティブのLiferayポートレットに変更を加えています。フックまたは同様のアプローチで関数を独自の実装に変更するにはどうすればよいですか?
事前条件と事後条件の作成方法、およびインターフェイスの新しい実装の作成方法を読みましたが、元の状態のままにしておきたいポートレットのランダムクラス内のランダム関数を置き換える方法がわかりません。
ネイティブLiferayポートレットの機能を変更する方法はいくつかあります。ここに簡単な概要があります。
ほとんどのフック機能は、/ docroot/WEB-INFディレクトリにあるliferay-hook.xmlファイルで説明されています。最も一般的な方法は次のとおりです。
liferay-hook.xmlファイルで、次の子をに追加します<hook/>
<custom-jsp-dir>/META-INF/custom_jsps</custom-jsp-dir>
この要素は、上書きするJSPを配置する場所を定義します。たとえば、次の場所にあるドキュメントライブラリポートレットのview.jspを書き直したい場合があります。
[custom-jsp-dir]/html/portlet/document_library/view.jsp
これについては、通常、に保存されているportal.propertyファイルを定義する必要があります。
/docroot/WEB-INF/src/portal.property
そして、liferay-hook.xml
その場所を教えてください。上記の例を次に示します。
<portal-properties>portal.properties</portal-properties>
たとえば、Userの変更を聞きたい場合は、プロパティに次のように記述します。
value.object.listener.com.liferay.portal.model.User=com.my.example.UserListener;
次の形式ですが、
value.object.listener.[class-to-listen]=[my-listener-class]
そして、クラスはを実装する必要がありますcom.liferay.portal.model.BaseModelListener
。
ここでは、追加、更新、削除などのイベントを聞くことができます。
ここで同様の話liferay-hook.xml
を、<hook />
要素に追加します
<service>
<service-type>com.liferay.portal.service.UserService</service-type>
<service-impl>my.example.service.UserServiceImpl</service-impl>
</service>
ここで、実装は特定のサービスの正しいラッパークラスを拡張する必要があります。たとえば、上記の例では、
com.liferay.portal.service.UserServiceWrapper;
これで、のようなUserServiceのすべてのパブリックメソッドを上書きできるようになりますupdateUser(..)
。
サービスの拡張と非常によく似た方法で、次の要素を定義します。<hook />
<struts-action>
<struts-action-path>/message_boards/view</struts-action-path>
<struts-action-impl>my.example.action.SampleViewAction</struts-action-impl>
</struts-action>
延長する必要があります、
com.liferay.portal.kernel.struts.BaseStrutsAction
リクエストにアクセスして、カスタムアクションを実行できます。これは、カスタムJSPと組み合わせると非常に強力です。
使用しているLiferayのバージョンとの互換性を必ず確認してください。
さらに詳細な制御が必要な場合は、ext-pluginを使用する必要があります。