Extending Liferay
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

動的インクルードを使用した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 に変更してください。

次に、以下の手順に従ってください。

  1. ダウンロードして解凍します 動的インクルードを使用した JSP のカスタマイズ。

    curl https://resources.learn.liferay.com/examples/liferay-n3q9.zip -O
    
    unzip liferay-n3q9.zip
    
  2. モジュールのルートディレクトリから、ビルドとデプロイを実行します。

    ./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    
    注記

    このコマンドは、デプロイされたjarファイルをDockerコンテナの/opt/liferay/osgi/modulesにコピーするのと同じです。

  3. Liferay Dockerコンテナコンソールでデプロイメントを確認してください。

    com.acme.n3q9.able.web_1.0.0 [1459] が起動しました
    com.acme.n3q9.baker.web_1.0.0 [1460] が起動しました
    
  4. サンプルモジュールが正しく動作することを確認してください。 ブラウザで https://localhost:8080 を開いてください。

  5. サイトページに移動し、編集アイコン(Edit icon)をクリックします。 N3Q9 Bakerポートレットをページに追加します。 このウィジェットは「サンプルウィジェット」の中にあります。

    N3Q9 Bakerポートレットをサイトページに追加します。

最初の2行はN3Q9 Bakerポートレットから来ていますが、3行目はN3Q9 Ableモジュールの動的インクルードから挿入されていることに注目してください。 この例は2つの部分から構成されています。

  • 動的なインクルードをプレースホルダーとして特定の行に挿入するJSPポートレット

  • 動的インクルードを実装するOSGiモジュール。ポートレットのプレースホルダー行を新しいJSPコードに置き換えます。

これらのモジュールは様々な状況で役立ち、動的インクルードを適切に実装するには、両方を理解することが重要です。

動的インクルードを実装する

動的インクルードの最も一般的な用途は、Liferayのデフォルトのページやアプリケーションを完全に上書きすることなく、カスタムコードを追加することです。 Liferayの標準コードには、追加のリソース、HTML要素、エディタの変更などが必要になる可能性のある場所に、動的なインクルードが含まれています。 動的インクルードのキーがわかれば、それを使ってモジュールを作成し、コンテンツを挿入することができます。

  1. DynamicInclude の実装としてクラスを宣言し、 @Component アノテーションを付けます。

    @Component(service = DynamicInclude.class)
    
  2. 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>");
}
  1. レジスタ メソッドで、使用する動的インクルード タグを指定します。 サンプルでは、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() メソッドで設定されたターゲットと一致していることを確認してください。