Documentation

MVCリソースコマンド

MVCリソースコマンドのクラスは、アクションやレンダーをトリガーせずに、DXP / Portalインスタンスからリソース(画像、XML、またはその他の種類のリソース)を取得します。 リクエストまたはポートレットリソースURLは、MVCリソースコマンドを呼び出します。

MVCリソースコマンドを使用するサンプルポートレットをデプロイしてから、それを調べます。

MVCリソースコマンドを呼び出す

サンプルポートレットは、MVCリソースコマンドを使用して単純なファイルをダウンロードします。

新しいLiferay インスタンスを起動し、以下を実行します。

docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.29-ga29。

http://localhost:8080でLiferayへのサインインします。 メールアドレス_test@liferay.com_とパスワード_test_を使用してください。 プロンプトが表示されたら、パスワードを _learn_に変更します。

次に、以下の手順に従います。

  1. サンプルをダウンロードして解凍します。

    curl https://learn.liferay.com/dxp/latest/ja/building-applications/developing-a-java-web-application/using-mvc/liferay-p8v5.zip -O
    
    unzip liferay-p8v5.zip
    
  2. サンプルをビルドしてデプロイします。

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

    注釈

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

  3. Dockerコンテナコンソールでデプロイを確認します。

    STARTED com.acme.p8v5.web_1.0.0
    
  4. P8V5ポートレット] ウィジェットを [サンプル] カテゴリからウィジェットページに追加します。 P8V5ポートレットが表示されます。

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

    リンクはMVCリソースコマンドを呼び出して、単純なテキストファイルをダウンロードします。

  5. Download] をクリックします。 p8v5.txtというファイルがマシンにダウンロードされます。

  6. p8v5.txtファイルを開きます。 コンテンツは次のとおりです。

    Hello P8V5!
    

MVCリソースコマンドを使用してファイルをダウンロードしました。 次に、それらがどのように機能するかを確認します。

ポートレットを調べる

P8V5Portletは最小の MVCPortlet です。

@Component(
	property = {
		"com.liferay.portlet.display-category=category.sample",
		"javax.portlet.display-name=P8V5 Portlet",
		"javax.portlet.init-param.view-template=/p8v5/view.jsp",
		"javax.portlet.name=com_acme_p8v5_web_internal_portlet_P8V5Portlet"
	},
	service = Portlet.class
)
public class P8V5Portlet extends MVCPortlet {
}

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

"javax.portlet.name=com_acme_p8v5_web_internal_portlet_P8V5Portlet"

注釈

MVCResourceCommandは、ポートレットの名前(たとえば、ポートレットコンポーネントの javax.portlet.nameプロパティ値)によってポートレットにバインドします。

次に、ポートレットのMVCリソースコマンドクラスを調べます。

MVCResourceCommandクラスを調べる

MVCリソースコマンドクラスは、 MVCResourceCommand を直接実装することも、 BaseMVCResourceCommand を拡張することによって間接的に実装することもできます。 P8V5DownloadMVCResourceCommandは、MVCResourceCommandを直接実装します。

@Component(
	property = {
		"javax.portlet.name=com_acme_p8v5_web_internal_portlet_P8V5Portlet",
		"mvc.command.name=/p8v5/download"
	},
	service = MVCResourceCommand.class
)
public class P8V5DownloadMVCResourceCommand implements MVCResourceCommand {

	@Override
	public boolean serveResource(
			ResourceRequest resourceRequest, ResourceResponse resourceResponse)
		throws PortletException {

		try {
			PortletResponseUtil.sendFile(
				resourceRequest, resourceResponse, "p8v5.txt",
				"Hello P8V5!".getBytes(), "text");

			return false;
		}
		catch (IOException ioException) {
			_log.error(ioException, ioException);

			return true;
		}
	}

	private static final Log _log = LogFactoryUtil.getLog(
		P8V5DownloadMVCResourceCommand.class);

}

P8V5DownloadMVCResourceCommandは、MVCResourceCommandサービスを提供する Component です。 コンポーネントプロパティは、P8V5DownloadMVCResourceCommandcom_acme_p8v5_web_internal_portlet_P8V5Portletという名前のポートレットに適用し、P8V5DownloadMVCResourceCommandをMVCコマンド名/p8v5/downloadにマップします。 ここで指定する名前は、ポートレットで宣言されている名前と一致する必要があります。

注釈

ポートレットごとに個別の javax.portlet.nameプロパティを宣言することにより、MVCResourceCommandコンポーネントを複数のポートレットに関連付けることができます。

  @Component(
     property = {
        "javax.portlet.name=com_acme_p8v5_web_internal_portlet_P8V5Portlet",
        "javax.portlet.name=com_acme_p8v5_web_internal_portlet_P8V6Portlet",
        "mvc.command.name=/p8v5/download"
     },
     service = MVCResourceCommand.class
  )

サンプルのserveResourceメソッドは、単純なテキストファイルを作成し、 PortletResponseUtil を介してユーザーに送信します。 このメソッドは、エラーが発生した場合はtrueを返し、それ以外の場合はfalseを返します。

次に、ポートレットのJSPがUIコンポーネントアクションをコマンドにマップする方法を学習します。

ポートレットリソースURLを調べる

ポートレットのview.jspファイルは、MVCリソースコマンドを呼び出すためのリンクをレンダリングします。

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<h4>P8V5 Portlet</h4>

<a href="<portlet:resourceURL id="/p8v5/download" />">Download</a>

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

view.jspポートレットリソースURL

P8V5DownloadMVCResourceCommandコンポーネントプロパティ

<a href="<portlet:resourceURL id="/p8v5/download" />">Download</a>

mvc.command.name=/p8v5/download

ビューの [ダウンロード<] リンクをクリックすると、P8V5DownloadMVCResourceCommandserveResourceメソッドが呼び出されます。

次のステップ

これで、MVCリソースコマンドの使用方法がわかりました。 ポートレットのコンテンツをローカライズする場合は、MVCポートレットでのローカライズされたメッセージの使用を参照してください。 モデルレイヤー、永続レイヤー、およびサービスレイヤーを開発する準備ができている場合は、サービスビルダーをご覧ください。