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

MVCリソースコマンド

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

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

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

サンプルポートレットは、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-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. ダウンロードをクリックします。 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 サービスを提供する コンポーネント です。 コンポーネントプロパティは、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ポートレットリソースURLP8V5DownloadMVCResourceCommandコンポーネントプロパティ
<a href="<portlet:resourceURL id="/p8v5/download" />">Download</a>mvc.command.name=/p8v5/download

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

次のステップ

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