MVCポートレットを使用したビューのレンダリング
ユーザーがポートレットのビューにアクセスできるようにする場合は、ビューへのナビゲーションを実装する必要があります。 ポートレットレンダーURLは、このような場合に役立ちます。
ここでは、ポートレットレンダーURLを使用するサンプルアプリケーションをデプロイします。 ポートレットが、MVCポートレットのmvcPathパラメーターを使用してビューパスを設定するURLを作成する方法を見ていきます。
このサンプルポートレットには 2 つのビューがあります。 ビュー 1 にはその名前と ビュー 2へのリンクが表示され、その逆も同様です。

複数のビューを持つMVCポートレットをデプロイする
サンプルポートレットをデプロイし、そのビュー間を移動する方法は次のとおりです。 学習の目的で、ポートレットはmvcPathパラメーター値をログに記録します。
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-c8m3.zip -Ounzip liferay-c8m3.zip -
サンプルをビルドしてデプロイします。
cd liferay-c8m3./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注記このコマンドは、モジュール JAR を Docker コンテナ上の
/opt/liferay/osgi/modulesにコピーすることと同じです。 -
Dockerコンテナコンソールでデプロイを確認してください。
com.acme.c8m3.web_1.0.0 を開始しました -
C8M3 ポートレット ウィジェットを サンプル カテゴリからウィジェットページに追加します。 ビュー 1 (ポートレットのデフォルト ビュー) が表示されます。

以下のメッセージがログに出力されます。
MVC パス nullレンダリングリクエストにはまだMVCパスパラメータが含まれていません。 これは予想通りだ。 ポートレットは、デフォルトではポートレットクラス(後述)を使用してビュー1をレンダリングします。 次のステップでは、MVCパスパラメータを使用します。
-
をクリックしてビュー2に移動します。 ビュー2が表示されます。

ログメッセージには、MVC パス値
/view_2.jsp—が表示され、これは View 2 テンプレートへのパスです。MVCパス /view_2.jsp -
をクリックしてビュー1に移動します。 ビュー1が再び表示されます。

ログメッセージには、MVC パス
/view_1.jspが出力されます。MVCパス /view_1.jsp
ポートレットビュー間の往復が完了しました。 次に、ポートレットがデフォルトビューを設定し、レンダリングURLとMVCパスリクエストパラメータを使用してビューへのパスを設定する方法を学びます。
デフォルトビューの設定
ポートレットのデフォルトビューは、ユーザーが初めてポートレットのページにアクセスしたときにレンダリングされます。 ポートレットクラスの初期化パラメータによって、デフォルトビューが設定されます。 C8M3Portlet.java サンプルクラスは、その @Component アノテーションでデフォルトビューを設定します。
@Component(
property = {
"com.liferay.portlet.display-category=category.sample",
"jakarta.portlet.display-name=C8M3 Portlet",
"jakarta.portlet.init-param.view-template=/view_1.jsp"
},
service = Portlet.class
)
public class C8M3Portlet extends MVCPortlet {
@Component プロパティ "javax.portlet.init-param.view-template=/view1.jsp" は、 /view1.jsp をデフォルトのビュー テンプレートとして指定します。 テンプレートパスは、ポートレットの src/main/resources/META-INF/resources フォルダからの相対パスです。
次に、ビュー1がビュー2にどのようにリンクしているかを学びましょう。
ポートレットレンダリングURLを使用してビューにリンクする
ビュー 1 には、 ビュー 1 という見出しと、 ビュー 2 へ移動 というラベルの付いたリンクのみがあります。 view1.jsp のコードは以下のとおりです。
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<h4>C8M3 Portlet</h4>
<h5>ビュー 1</h5>
<portlet:renderURL var="view2URL">
<portlet:param name="mvcPath" value="/view_2.jsp" />
</portlet:renderURL>
<a href="<%= view2URL %>">ビュー2へ移動</a>
portlet:renderURL タグはポートレットタグライブラリから取得され、プレフィックス ポートレット が割り当てられます。 上記のレンダリング URL は変数 view2URL に割り当てられます。 レンダリング URL は、 portlet:param という名前 mvcPath の値 /view_2.jsp を宣言します。 ポートレットがレンダリングされると、 mvcPath パラメーターがポートレットの RenderRequest オブジェクトに追加されます。 ポートレット要求を処理すると、 MVCPortlet は、 mvcPath に割り当てられたテンプレートをレンダリングします。
ポートレットがレンダリングURLを使用するには、そのURLをハイパーリンクやボタンなどのUIコンポーネントにバインドする必要があります。 ハイパーリンク <a href="<%= view2URL %>">ビュー 2 へ移動</a> は、レンダリング URL を UI コンポーネントにバインドします。
ユーザーが ビュー 2 へ移動 ハイパーリンクをクリックすると、 mvcPath パラメーターを含むポートレット リクエストがポートレット クラスに送信されます。
mvcPathポートレットパラメータの処理
ポートレットはリクエストオブジェクトを受け取ると、そのリクエストオブジェクトのパラメータに応じて応答することができます。 C8M3Portletの render メソッドはレンダリング要求に応答します。
@Override
public void render(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
if (_log.isInfoEnabled()) {
String mvcPath = renderRequest.getParameter("mvcPath");
_log.info("MVC path " + mvcPath);
}
super.render(renderRequest, renderResponse);
}
private static final Log _log = LogFactoryUtil.getLog(C8M3Portlet.class);
C8M3Portletの render メソッドは、 mvcPath パラメーター値をログに記録し、ポートレットのレンダリングをスーパークラス MVCPortlet に委譲します。 MVCPortlet は、 mvcPath ポートレット要求パラメータに割り当てられたビューをレンダリングします。
mvcPath リクエスト パラメーターがない場合、 MVCPortlet はデフォルトのテンプレート (つまり、 javax.portlet.init-param.view-template コンポーネント プロパティで指定されるテンプレート) を表示します。
View 2 テンプレート view2.jsp は、ポートレット レンダリング URL を使用して view1.jsp にマッピングされます。
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<h4>C8M3 Portlet</h4>
<h5>View 2</h5>
<portlet:renderURL var="view1URL">
<portlet:param name="mvcPath" value="/view_1.jsp" />
</portlet:renderURL>
<a href="<%= view1URL %>">ビュー1へ移動</a>
これは、ビュー1への往復経路を実装します。
次は?
これでポートレットビューのレンダリング方法がわかりました。 次に、個別の RenderCommand クラスを使用して、ポートレットでアクションを実行したり、ビューをレンダリングしたりできます。