Liferayポータル6.1および6.2では、開発者はフックおよびStrutsAction
ラッパーを使用して、ポータルおよびポートレットStruts操作をカスタマイズできました。 たとえば、ログインポートレットのログイン操作をオーバーライドしたフックのliferay-hook.xml
ファイルには、次のエントリがありました。
<struts-action>
<struts-action-path>/login/login</struts-action-path>
<struts-action-impl>
com.liferay.sample.hook.action.ExampleStrutsPortletAction
</struts-action-impl>
</struts-action>
liferay-hook.xml
には、Strutsマッピングと、デフォルトのログイン操作をオーバーライドする新しいクラスが含まれています。
ラッパーは、Struts操作がそれぞれポータルであるかポートレット操作であるかに応じて、 BaseStrutsAction
またはBaseStrutsPortletAction
を拡張できます。
7.0以降このメカニズムはStruts操作を使用しなくなったため、ほとんどのポートレットに適用されなくなりましたが、代わりにLiferayMVCCommand
を使用します。
このチュートリアルでは、既存のStrutsAction
ラッパーをMVCCommand
に変換する方法を示します。
古いラッパーをMVCコマンドに変換する
StrutsAction
ラッパーをMVCCommand
へ変換することは、思うよりも簡単です。
レビューとして、レガシーStrutsAction
ラッパーはprocessAction
、 render
、およびserveResource
などのほか、たとえ1つのメソッドのみがカスタマイズされていた場合であっても、すべてのメソッドを実装しました。 これらの各メソッドは、異なるクラスを使用して個別にカスタマイズできるため、ロジックをよりシンプルで簡単に保守できるようになりました。 StrutsAction
ラッパーでカスタマイズしたメソッドに応じて、以下に示す適合したMVCCommand
インターフェイスを使用する必要があります。
- process操作 → MVCActionCommand
- レンダリング→ MVCRenderCommand
- サーブリソース → MVCResourceCommand
StrutsAction
ラッパーの例については、ExampleStrutsPortletAction
クラス をご覧ください。 オーバーライドされた操作に応じて、ユーザーは異なるMVCCommand
を使用する必要があります。 この例では、操作とレンダリングがオーバーライドされているため、新しいパターンに移行するには、 MVCActionCommand
とMVCRenderCommand
の2つのクラスを作成します。
次に、MVCCommand
が使用するマッピングを決定します。
MVCコマンド URLのマッピング
ほとんどの場合、MVCCommand
マッピングは、従来のStruts操作で定義されたマッピングと同じです。
最初のログインの例をもう一度使用すると、struts-action-path
マッピングと/login/login
が、Liferay DXP 7.1のMVCCommand
マッピングと同じままですが、マッピングの一部が変更されている場合があります。 Liferay DXPのソースコードをチェックして、正しいマッピングを決定することをお勧めします。
ポートレットURLタグを使用してMVCコマンドURLにマップします。
-
MVCRenderCommand
URLは、mvcRenderCommandName
パラメーターに入ります。 例:<portlet:renderURL var="editEntryURL"> <portlet:param name="mvcRenderCommandName" value="/hello/edit_entry" /> <portlet:param name="entryId" value="<%= String.valueOf( entry.getEntryId()) %>" /> </portlet:renderURL>
-
MVCActionCommand
URLは、actionURL
タグname
属性またはパラメーターActionRequest.ACTION_NAME
に入ります。 例:<portlet:actionURL name="/blogs/edit_entry" var="editEntryURL" />
-
MVCResourceCommand
URLは、resourceURL
タグid
属性に入ります。 例:<portlet:resourceURL id="/login/captcha" var="captchaURL" />
この情報を取得したら、次のMVCCommand
チュートリアルにある手順に従って、 MVCCommand
をオーバーライドできます。
ここまで、StrutsActionWrapper
をMVCCommand
に変換する方法について学びました。