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 に変更してください。
次に、以下の手順に従ってください。
-
サンプルをダウンロードして解凍してください。
curl https://resources.learn.liferay.com/examples/liferay-p8v5.zip -Ounzip liferay-p8v5.zip -
サンプルをビルドしてデプロイします。
cd liferay-p8v5./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注記このコマンドは、モジュール JAR を Docker コンテナ上の
/opt/liferay/osgi/modulesにコピーすることと同じです。 -
Dockerコンテナコンソールでデプロイを確認してください。
com.acme.p8v5.web_1.0.0 を開始しました -
P8V5 ポートレット ウィジェットを サンプル カテゴリからウィジェットページに追加します。 P8V5ポートレットが表示されます。

このリンクは、MVCリソースコマンドを呼び出して、シンプルなテキストファイルをダウンロードします。
-
をクリックしてダウンロードをダウンロードしてください。
p8v5.txtという名前のファイルがコンピュータにダウンロードされます。 -
p8v5.txtファイルを開きます。 内容は以下のとおりです。こんにちは、P8V5さん!
MVCリソースコマンドを使用してファイルをダウンロードしました。 それでは、その仕組みを見ていきましょう。
ポートレットを調べる
P8V5Portlet は最小限の MVCPortlet です。
@Component(
property = {
"com.liferay.portlet.display-category=category.sample",
"jakarta.portlet.display-name=P8V5 Portlet",
"jakarta.portlet.init-param.view-template=/p8v5/view.jsp",
"jakarta.portlet.name=com_acme_p8v5_web_internal_portlet_P8V5Portlet"
},
service = Portlet.class
)
public class P8V5Portlet extends MVCPortlet {
}
@Component javax.portlet.name プロパティはポートレットの名前を設定します。
"jakarta.portlet.name=com_acme_p8v5_web_internal_portlet_P8V5Portlet"
MVCResourceCommandは、ポートレット名 (たとえば、ポートレット コンポーネント javax.portlet.name プロパティ値) によってポートレットにバインドされます。
次は、ポートレットのMVCリソースコマンドクラスです。
MVCResourceCommand クラスを調べます
MVC リソース コマンド クラスは、 MVCResourceCommand を直接実装するか、 BaseMVCResourceCommand を拡張して間接的に実装できます。 P8V5DownloadMVCResourceCommand は、 MVCResourceCommand を直接実装します。
@Component(
property = {
"jakarta.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 サービスを提供します。 コンポーネントのプロパティは、 P8V5DownloadMVCResourceCommand を com_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" />">ダウンロード</a>
最初の行は、 ポートレット プレフィックスを介して Portlet 2.0 タグライブラリを利用可能にします。 この JSP は、タグライブラリの portlet:resourceURL タグを使用して、アクションを UI コンポーネントにバインドします。 タグの id 属性は、MVC リソース コマンドの mvc.command.name プロパティ値を使用します。 以下の表は相関関係を示しています。
view.jspポートレットリソースURL | P8V5DownloadMVCResourceCommandコンポーネントプロパティ |
|---|---|
<a href="<portlet:resourceURL id="/p8v5/download" />">ダウンロード</a> | mvc.command.name=/p8v5/download |
ビューの Download リンクをクリックすると、 P8V5DownloadMVCResourceCommandの serveResource メソッドが呼び出されます。
次は?
これで、MVCリソースコマンドの使い方がわかりました。 ポートレットのコンテンツをローカライズする場合は、 ローカライズされたメッセージの使用 を参照してください。 モデル、永続化、およびサービス レイヤーの開発準備が整っている場合は、 Service Builder にアクセスしてください。