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コンテナコンソールでデプロイを確認します。
STARTED com.acme.p8v5.web_1.0.0 -
[P8V5ポートレット]ウィジェットを[サンプル]カテゴリからウィジェットページに追加します。 P8V5ポートレットが表示されます。

リンクはMVCリソースコマンドを呼び出して、単純なテキストファイルをダウンロードします。
-
ダウンロードをクリックします。
p8v5.txtというファイルがマシンにダウンロードされます。 -
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 サービスを提供する コンポーネント です。 コンポーネントプロパティは、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" />">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 |
ビューの[ダウンロード<]/0>リンクをクリックすると、P8V5DownloadMVCResourceCommandのserveResourceメソッドが呼び出されます。
次のステップ
これで、MVCリソースコマンドの使用方法がわかりました。 ポートレットのコンテンツをローカライズする場合は、「 ローカライズされたメッセージの使用」を参照してください。 モデル、永続性、およびサービス レイヤーを開発する準備ができたら、 サービス ビルダーにアクセスしてください。