Dynamic Includesを用いたJSPのカスタマイズ
liferay-util:dynamic-include
タグ は、コンテンツを挿入できるプレースホルダーです(JavaScriptコード、HTMLなど)。 サンプルプロジェクトでは、dynamic includeでコンテンツを挿入する方法を示しています。
サンプルプロジェクトをデプロイする
新しいLiferay DXPインスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 。
メールアドレス test@liferay.com とパスワード test を使用して、http://localhost:8080でLiferayにサインインしてください。 プロンプトが表示されたら、パスワードを learn に変更します。
次に、以下の手順を実行します。
-
動的インクルードによるJSPのカスタマイズ をダウンロードして解凍します。
curl https://resources.learn.liferay.com/dxp/latest/en/liferay-internals/extending-liferay/customizing-jsps/liferay-n3q9.zip -O
unzip liferay-n3q9.zip
-
モジュールのルートから、ビルドおよびデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
Noteこのコマンドは、デプロイされた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
を開きます。 -
サイトページに移動し、編集アイコン()をクリックします。 N3Q9 Bakerポートレットをページに追加します。 ウィジェットは、サンプルウィジェットの下にあります。
最初の2行はN3Q9 Baker Portletから、3行目はN3Q9 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を挿入したい場所に追加します。 サンプルでは、N3Q9 Baker Portletの 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ポートレットの使用を参照してください。