MVCリソースコマンド
MVCリソースコマンドのクラスは、アクションやレンダーをトリガーせずに、DXP / Portalインスタンスからリソース(画像、XML、またはその他の種類のリソース)を取得します。 リクエストまたはポートレットリソースURLは、MVCリソースコマンドを呼び出します。
MVCリソースコマンドを使用するサンプルポートレットをデプロイしてから、それを調べます。
MVCリソースコマンドを呼び出す
サンプルポートレットは、MVCリソースコマンドを使用して単純なファイルをダウンロードします。 新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.55-ga55。
http://localhost:8080でLiferayへのサインインします。 メールアドレス[email protected]_とパスワード_test_を使用してください。 プロンプトが表示されたら、パスワードを _learn_に変更します。
次に、以下の手順に従います。
サンプルをダウンロードして解凍します。
curl https://resources.learn.liferay.com/dxp/latest/ja/building-applications/developing-a-java-web-application/using-mvc/liferay-p8v5.zip -O
unzip liferay-p8v5.zip
サンプルをビルドしてデプロイします。
cd liferay-p8v5
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
noteこのコマンドは、モジュールJARをDockerコンテナの
/opt/liferay/osgi/modules
にコピーするのと同じです。Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.p8v5.web_1.0.0
[P8V5ポートレット] ウィジェットを [サンプル] カテゴリからウィジェットページに追加します。 P8V5ポートレットが表示されます。
リンクはMVCリソースコマンドを呼び出して、単純なテキストファイルをダウンロードします。
[Download] をクリックします。
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
サービスを提供する Component
です。 コンポーネントプロパティは、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 |
ビューの [ダウンロード<] リンクをクリックすると、P8V5DownloadMVCResourceCommand
のserveResource
メソッドが呼び出されます。
次のステップ
これで、MVCリソースコマンドの使用方法がわかりました。 ポートレットのコンテンツをローカライズする場合は、MVCポートレットでのローカライズされたメッセージの使用を参照してください。 モデルレイヤー、永続レイヤー、およびサービスレイヤーを開発する準備ができている場合は、サービスビルダーをご覧ください。