動的インクルードを使用したJSPのカスタマイズ
のliferay-util:dynamic-includeタグ
は、コンテンツ—、JavaScriptコード、HTML、
などを挿入できるプレースホルダーです。 サンプルプロジェクトでは、dynamic includeでコンテンツを挿入する方法を示しています。
サンプルプロジェクトをデプロイする
Liferay DXP の新しいインスタンスを起動するには、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/dxp:2026.q1.9-lts
http://localhost:8080 に、メールアドレス test@liferay.com とパスワード test を使用して Liferay にサインインします。 プロンプトが表示されたら、パスワードを learn に変更してください。
次に、以下の手順に従ってください。
-
ダウンロードして解凍します 動的インクルードを使用した JSP のカスタマイズ。
curl https://resources.learn.liferay.com/examples/liferay-n3q9.zip -Ounzip liferay-n3q9.zip -
モジュールのルートディレクトリから、ビルドとデプロイを実行します。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注記このコマンドは、デプロイされたjarファイルをDockerコンテナの/opt/liferay/osgi/modulesにコピーするのと同じです。
-
Liferay Dockerコンテナコンソールでデプロイメントを確認してください。
com.acme.n3q9.able.web_1.0.0 [1459] が起動しました com.acme.n3q9.baker.web_1.0.0 [1460] が起動しました -
サンプルモジュールが正しく動作することを確認してください。 ブラウザで
https://localhost:8080を開いてください。 -
サイトページに移動し、編集アイコン(
)をクリックします。 N3Q9 Bakerポートレットをページに追加します。 このウィジェットは「サンプルウィジェット」の中にあります。
最初の2行はN3Q9 Bakerポートレットから来ていますが、3行目はN3Q9 Ableモジュールの動的インクルードから挿入されていることに注目してください。 この例は2つの部分から構成されています。
-
動的なインクルードをプレースホルダーとして特定の行に挿入するJSPポートレット
-
動的インクルードを実装するOSGiモジュール。ポートレットのプレースホルダー行を新しいJSPコードに置き換えます。
これらのモジュールは様々な状況で役立ち、動的インクルードを適切に実装するには、両方を理解することが重要です。
動的インクルードを実装する
動的インクルードの最も一般的な用途は、Liferayのデフォルトのページやアプリケーションを完全に上書きすることなく、カスタムコードを追加することです。 Liferayの標準コードには、追加のリソース、HTML要素、エディタの変更などが必要になる可能性のある場所に、動的なインクルードが含まれています。 動的インクルードのキーがわかれば、それを使ってモジュールを作成し、コンテンツを挿入することができます。
-
DynamicIncludeの実装としてクラスを宣言し、@Componentアノテーションを付けます。@Component(service = DynamicInclude.class) -
includeメソッドで、カスタムコンテンツを追加します。 サンプルプロジェクトでは、シンプルなPrintWriterの例を使用しています。
@Override
public void include(
HttpServletRequest request, HttpServletResponse response,
String key)
throws IOException {
PrintWriter printWriter = response.getWriter();
printWriter.println("<h3>Added by N3Q9 Able dynamic include.</h3>");
}
レジスタメソッドで、使用する動的インクルード タグを指定します。 サンプルでは、register メソッドは Baker モジュールのview.jspの動的インクルードを対象としています。
@Override
public void register(DynamicIncludeRegistry dynamicIncludeRegistry) {
dynamicIncludeRegistry.register("com.acme.n3q9.baker.web#view.jsp");
}
動的インクルードを挿入する
従来、Liferayの標準ポートレットのJSPに変更を加えるには、JSP全体を書き直す必要がありました。 これによりポートレット全体を完全に制御できるようになりますが、管理が難しくなります。 Liferayインスタンスをアップグレードすると、Liferayによるデフォルトポートレットの変更が、カスタム実装と競合する可能性があります。
カスタマイズに複数のコード行が含まれる場合、ネイティブコードを分離して最新の状態に保つのは困難になることがあります。 代わりに、カスタマイズを適用したい場所に動的インクルードを挿入し、別のモジュールで実装することができます。 この方法を使えば、デフォルトのJSPにカスタムコードを1行追加するだけでポートレットを更新できます。
これを行うには、動的インクルードを挿入したい場所に liferay-util:dynamic-include タグを追加します。 サンプルでは、タグは N3Q9 Baker Portlet の view.jsp の下部に追加されます。
<%@ taglib uri="http://liferay.com/tld/util" prefix="liferay-util" %>
<h2>N3Q9 Baker Portlet</h2><br />
<h3>こんにちは、N3Q9 ベイカー。</h3><br />
<liferay-util:dynamic-include key="com.acme.n3q9.baker.web#view.jsp" />
動的インクルード キー が、上記の register() メソッドで設定されたターゲットと一致していることを確認してください。