Using MVC
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

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 に変更してください。

次に、以下の手順に従ってポートレットをデプロイし、そのアクションをトリガーします。

  1. サンプルをダウンロードして解凍してください。

    curl https://resources.learn.liferay.com/examples/liferay-l6y9.zip -O
    
    unzip liferay-l6y9.zip
    
  2. サンプルをビルドしてデプロイします。

    cd liferay-l6y9
    
    ./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    
    注記

    このコマンドは、モジュール JAR を Docker コンテナ上の /opt/liferay/osgi/modules にコピーすることと同じです。

  3. Dockerコンテナコンソールでデプロイを確認してください。

    com.acme.l6y9.web_1.0.0 を開始しました
    
  4. L6Y9 ポートレット ウィジェットを サンプル カテゴリからウィジェットページに追加します。 L6Y9ポートレットが表示されます。

    L6Y9ポートレットをページに追加しました。

    これらのリンクは、異なる MVCActionCommand クラスのメソッドを呼び出します。 学習目的のため、これらのメソッドは自身を識別するメッセージをログに記録します。

  5. をクリックして L6Y9 を実行してください。 DoL6Y9AbleMVCActionCommand は、その doProcessAction メソッドの呼び出しをログに記録します。

    [DoL6Y9AbleMVCActionCommand:26] #doProcessAction(ActionRequest, ActionResponse) を呼び出します
    
  6. をクリックして L6Y9 Baker を実行します。 DoL6Y9BakerMVCActionCommand は、その doProcessAction メソッドの呼び出しをログに記録します。

    [DoL6Y9BakerMVCActionCommand:26] #doProcessAction(ActionRequest, ActionResponse) を呼び出します
    

あなたはMVCアクションコマンドの動作を実際に目にしました。 それでは、それらがどのように機能するかを見ていきましょう。

ポートレットを調べる

L6Y9Portlet は最小限の MVCPortlet です。

@Component(
	property = {
		"com.liferay.portlet.display-category=category.sample",
		"jakarta.portlet.display-name=L6Y9 Portlet",
		"jakarta.portlet.init-param.view-template=/view.jsp",
		"jakarta.portlet.name=com_acme_l6y9_web_internal_portlet_L6Y9Portlet"
	},
	service = Portlet.class
)
public class L6Y9Portlet extends MVCPortlet {
}

@Component javax.portlet.name プロパティはポートレットの名前を設定します。

"jakarta.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" />">L6Y9 を実行可能</a>
</p>

<p>
	<a href="<portlet:actionURL name="/l6y9/do_l6y9_baker" />">L6Y9 を実行可能ベイカー</a>
</p>

最初の行は、portletのプレフィックスを介してポートレット2.0タグライブラリを使用できるようにしています。 この JSP は、タグライブラリの portlet:actionURL タグを使用して、アクションを UI コンポーネントにバインドします。 各タグは、MVCアクションコマンドの mvc.command.name プロパティ値をタグの name 属性に割り当てることにより、UIコンポーネントをMVCコマンドにマッピングします。

view.jsp ポートレットアクションURLDoL6Y9AbleMVCActionCommand コンポーネントプロパティ
<portlet:actionURL name="/do_l6y9_able" />mvc.command.name=/l6y9/do_l6y9_able
view.jsp ポートレットアクションURLDoL6Y9BakerMVCActionCommand コンポーネントプロパティ
<portlet:actionURL name="/do_l6y9_baker" />mvc.command.name=/l6y9/do_l6y9_baker

例えば、 Do L6Y9 Able リンクをクリックすると、 DoL6Y9AbleMVCActionCommandの doProcessAction メソッドが呼び出されます。

MVCActionCommand クラスを調べます

MVC Action Command クラスは、 MVCActionCommand を直接実装するか、 BaseMVCActionCommand を拡張することによって実装できます。 DoL6Y9AbleMVCActionCommand は BaseMVCActionCommand を拡張します。

@Component(
	property = {
		"jakarta.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 メソッドは、自身を識別するメッセージをログに記録します。

注記

MVCActionCommand コンポーネントを複数のポートレットに関連付けるには、各ポートレットに対して個別の javax.portlet.name プロパティを宣言します。

@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 と似ていますが、名前が Baker または baker であるのに対し、 Able または able は含まれていません。

次に、ポートレットのJSPがUIコンポーネントのアクションをコマンドにどのようにマッピングしているかを見てみましょう。

次は?

MVC アクション コマンドの使い方がわかったので、 MVC レンダリング コマンド と MVC リソース コマンド も確認してみると良いでしょう。 アプリのコンテンツのローカライズを開始する場合は、 ローカライズされたメッセージの使用 を参照してください。 モデル、永続化、およびサービス レイヤーの開発を開始する準備ができている場合は、 Service Builder にアクセスしてください。