MVCアクションコマンド
MVCアクションコマンドは、アクションを個別のクラスとして処理します。 アクションコマンドを使用すると、多くのアクションを持つMVCPortletでアクションロジックを整理できます。 ポートレットのJSPのアクションURLは、指定されたMVCアクションコマンドクラスを呼び出します。
MVCアクションコマンドを使用するサンプルポートレットをデプロイしてから、それを調べます。
ポートレットのMVCアクションコマンドを呼び出す
サンプルポートレットの2つのアクションは、呼び出されているMVCアクションコマンドクラスとメソッドを示すメッセージをログに記録します。
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132
http://localhost:8080でLiferayにサインインします。 メールアドレス test@liferay.com とパスワード testを使用してください。 プロンプトが表示されたら、パスワードを learnに変更します。
次に、次の手順に従ってポートレットをデプロイし、そのアクションをトリガーします。
-
サンプルをダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-l6y9.zip -Ounzip liferay-l6y9.zip -
サンプルをビルドしてデプロイします。
cd liferay-l6y9./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注このコマンドは、モジュールJARをDockerコンテナ上の
/opt/liferay/osgi/modulesにコピーするのと同じです。 -
Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.l6y9.web_1.0.0 -
[L6Y9 ポートレット]ウィジェットを[サンプル]カテゴリからウィジェットページに追加します。 L6Y9ポートレットが表示されます。

リンクは、さまざまな
MVCActionCommandクラスのメソッドを呼び出します。 学習の目的で、メソッドは自分自身を識別するメッセージをログに記録します。 -
L6Y9 Ableを実行をクリックします。
DoL6Y9AbleMVCActionCommandは、そのdoProcessActionメソッドの呼び出しをログに記録します。[DoL6Y9AbleMVCActionCommand:26] Invoke #doProcessAction(ActionRequest, ActionResponse) -
Do L6Y9 Bakerをクリックします。
DoL6Y9BakerMVCActionCommandは、そのdoProcessActionメソッドの呼び出しをログに記録します。[DoL6Y9BakerMVCActionCommand:26] Invoke #doProcessAction(ActionRequest, ActionResponse)
MVCアクションコマンドの動作を見てきました。 次に、それらがどのように機能するかを確認します。
ポートレットを調べる
L6Y9Portlet は最小限の MVCPortletです。
@Component(
property = {
"com.liferay.portlet.display-category=category.sample",
"javax.portlet.display-name=L6Y9 Portlet",
"javax.portlet.init-param.view-template=/view.jsp",
"javax.portlet.name=com_acme_l6y9_web_internal_portlet_L6Y9Portlet"
},
service = Portlet.class
)
public class L6Y9Portlet extends MVCPortlet {
}
@Component javax.portlet.name プロパティは、ポートレットの名前を設定します。
"javax.portlet.name=com_acme_l6y9_web_internal_portlet_L6Y9Portlet"
ポートレットはデフォルトで/view.jspをレンダリングします。
MVCActionCommandは、ポートレットの名前 (例: ポートレット コンポーネント javax.portlet.name プロパティ値) によってポートレットにバインドされます。
サンプルポートレットは、デフォルトでview.jspをレンダリングします。 次に、JSPがMVCアクションコマンドクラスを呼び出す方法を確認します。
ポートレットアクションのURLを調べる
ポートレットのview.jspファイルは、ポートレットのMVCアクションコマンドを呼び出すためのリンクをレンダリングします。
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<h4>L6Y9 Portlet</h4>
<p>
<a href="<portlet:actionURL name="/l6y9/do_l6y9_able" />">Do L6Y9 Able</a>
</p>
<p>
<a href="<portlet:actionURL name="/l6y9/do_l6y9_baker" />">Do L6Y9 Baker</a>
</p>
最初の行は、portletのプレフィックスを介してポートレット2.0タグライブラリを使用できるようにしています。 このJSPは、タグライブラリのportlet:actionURLタグを使用してアクションをUIコンポーネントにバインドします。 各タグは、MVCアクションコマンドのmvc.command.nameプロパティ値をタグのname属性に割り当てることにより、UIコンポーネントをMVCコマンドにマップします。
view.jsp ポートレットアクションURL | DoL6Y9AbleMVCActionCommand コンポーネントプロパティ |
|---|---|
<portlet:actionURL name="/do_l6y9_able" /> | mvc.command.name=/l6y9/do_l6y9_able |
view.jsp ポートレットアクションURL | DoL6Y9BakerMVCActionCommand コンポーネントプロパティ |
|---|---|
<portlet:actionURL name="/do_l6y9_baker" /> | mvc.command.name=/l6y9/do_l6y9_baker |
たとえば、[Do L6Y9 Able]リンクをクリックすると、DoL6Y9AbleMVCActionCommandのdoProcessActionメソッドが呼び出されます。
MVCActionCommandクラスを調べる
MVC アクション コマンド クラスは、 MVCActionCommand を直接実装するか、 BaseMVCActionCommandを拡張して実装できます。 DoL6Y9AbleMVCActionCommandはBaseMVCActionCommandを拡張します。
@Component(
property = {
"javax.portlet.name=com_acme_l6y9_web_internal_portlet_L6Y9Portlet",
"mvc.command.name=/l6y9/do_l6y9_able"
},
service = MVCActionCommand.class
)
public class DoL6Y9AbleMVCActionCommand extends BaseMVCActionCommand {
@Override
protected void doProcessAction(
ActionRequest actionRequest, ActionResponse actionResponse) {
if (_log.isInfoEnabled()) {
_log.info(
"Invoking #doProcessAction(ActionRequest, ActionResponse)");
}
}
private static final Log _log = LogFactoryUtil.getLog(
DoL6Y9AbleMVCActionCommand.class);
}
DoL6Y9AbleMVCActionCommand は、 MVCActionCommand サービスを提供する コンポーネント です。 DoL6Y9AbleMVCActionCommandのコンポーネントプロパティは、プロパティjavax.portlet.name=com_acme_l6y9_web_internal_portlet_L6Y9Portletを持つポートレットにコンポーネントを適用し、コンポーネントを/do_l6y9_ableという名前のMVCコマンドにマップします。 ユーザーがそのコマンド名にバインドされたアクションをトリガーすると、DoL6Y9AbleMVCActionCommandのdoProcessActionメソッドが実行されます。 デモンストレーションの目的で、上記のdoProcessActionメソッドは、それ自体を識別するメッセージをログに記録します。
各ポートレットに個別の javax.portlet.name プロパティを宣言することで、 MVCActionCommand コンポーネントを複数のポートレットに関連付けることができます。
@Component(
property = {
"javax.portlet.name=com_acme_l6y9_web_internal_portlet_L6Y9Portlet",
"javax.portlet.name=com_acme_l6y9_web_internal_portlet_L6Y0Portlet",
"mvc.command.name=/l6y9/download"
},
service = MVCActionCommand.class
)
DoL6Y9BakerMVCActionCommandはDoL6Y9AbleMVCActionCommandに似ていますが、名前にAbleまたはableではなくBakerまたはbakerが含まれている点が異なります。
次に、ポートレットのJSPがUIコンポーネントのアクションをコマンドにマップする方法を確認します。
次のステップ
MVC アクション コマンドの使い方がわかったので、 MVC レンダリング コマンド と MVC リソース コマンドを確認することをお勧めします。 アプリのコンテンツのローカライズを開始する場合は、「 ローカライズされたメッセージの使用」を参照してください。 モデル、永続性、およびサービス レイヤーの開発を開始する準備ができたら、 サービス ビルダーにアクセスしてください。