Dynamic Includesを用いたJSPのカスタマイズ¶
liferay-util:dynamic-include
タグ は、コンテンツを挿入できるプレースホルダーです(JavaScriptコード、HTMLなど)。 サンプルプロジェクトでは、dynamic includeでコンテンツを挿入する方法を示しています。
サンプルプロジェクトをデプロイする¶
Liferay DXPを起動します。 まだDockerコンテナがない場合は、以下を使用します。
docker run -it -m 8g -p 8080:8080 liferay/dxp:7.4.13-u29
別のLiferay PortalバージョンまたはLiferay DXPを実行している場合は、上記のコマンドを適宜調整してください。
Dynamic Includesを用いたJSPのカスタマイズ をダウンロードして解凍します。
curl https://learn.liferay.com/dxp/latest/en/liferay-internals/extending-liferay/customizing-jsps/liferay-n3q3.zip -O
unzip liferay-n3q3.zip
モジュールのルートから、ビルドおよびデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
注釈
このコマンドは、デプロイされたjarをDockerコンテナの/opt/liferay/osgi/modulesにコピーするのと同じです。
Liferay Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.n3q9.able.web_1.0.0 [1459] STARTED com.acme.n3q9.baker.web_1.0.0 [1460]
サンプルのモジュールが機能していることを確認します。 ブラウザで
https://localhost:8080
を開きます。[サイトページ]に移動し、編集アイコンをクリックします(
)。 N3Q3 Bakerポートレットをページに追加します。 ウィジェットは、サンプルウィジェットの下にあります。
最初の2行はN3Q3 Bakerポートレットからですが、3行目はN3Q3 Ableモジュールのdynamic includeから挿入されることに注意してください。
Dynamic Includeを実装する¶
@Component
アノテーションを使用して、DynamicInclude
の実装としてクラスを宣言します。@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
メソッドで、使用するdynamic includeタグを指定します。 サンプルでは、registerメソッドは、Bakerモジュールのview.jsp
のdynamic includeを対象としています。@Override public void register(DynamicIncludeRegistry dynamicIncludeRegistry) { dynamicIncludeRegistry.register("com.acme.n3q9.baker.web#view.jsp"); }
Dynamic Includeを挿入する¶
liferay-util:dynamic-include
タグをdynamic includeを挿入したい場所に追加します。 サンプルでは、N3Q3 Bakerポートレットのview.jsp
のボトムにタグを追加しています。
<%@ taglib uri="http://liferay.com/tld/util" prefix="liferay-util" %>
<h2>N3Q9 Baker Portlet</h2><br />
<h3>Hello N3Q9 Baker.</h3><br />
<liferay-util:dynamic-include key="com.acme.n3q9.baker.web#view.jsp" />
dynamic includeキー
が、上記の register()
メソッドで設定したターゲット属性と一致することを確認してください。
JSPやポートレットについては、JSPとMVCポートレットの使用を参照してください。