動的インクルードを使用したJSPのカスタマイズ

liferay-util:dynamic-includeタグは、コンテンツを挿入することができるプレースホルダーです。すべてのJSPの動的インクルードタグは、コンテンツ(JavaScriptコード、HTMLなど)を挿入するための拡張ポイントです。これを行うには、挿入するコンテンツを含むモジュールを作成し、そのコンテンツを動的インクルードタグに登録して、モジュールをデプロイします。

:カスタマイズするJSPにliferay-util:dynamic-includeタグ(またはクラスがIncludeTagから継承しているタグ)がない場合は、ポートレットフィルターなど、別のカスタマイズ方法を使用する必要があります。

ブログエントリには、動的インクルードがどのように機能するかの良い例が含まれています。参考用に、サンプルモジュールをダウンロードできます。

  1. コンテンツを挿入するliferay-util:dynamic-includeタグを見つけて、タグのキーを書き留めます。

    ブログアプリのview_entry.jspの上部と一番下にそれぞれ動的インクルードタグがあります。

    <%@ include file="/blogs/init.jsp" %>
    
    <liferay-util:dynamic-include key="com.liferay.blogs.web#/blogs/view_entry.jsp#pre" />
    
    ... ここにJSPコンテンツ
    
    <liferay-util:dynamic-include key="com.liferay.blogs.web#/blogs/view_entry.jsp#post" />
    

    ブログビューエントリの動的インクルードキーは以下のとおりです。

    • key="com.liferay.blogs.web#/blogs/view_entry.jsp#pre"
    • key="com.liferay.blogs.web#/blogs/view_entry.jsp#post"
  2. モジュールを作成します(例:blade create my-dynamic-include)。(モジュールは、動的インクルードの実装を保持します。

  3. モジュールビルドファイルで、これらのGradle依存関係のようなコンパイル専用の依存関係を指定します。

    dependencies {
    compileOnly group: "javax.portlet", name: "portlet-api", version: "2.0"
    compileOnly group: "javax.servlet", name: "javax.servlet-api", version: "3.0.1"
    compileOnly group: "com.liferay", name: "com.liferay.petra.string", version: "1.0.0"
    compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.0.0"
    compileOnly group: "org.osgi", name: "osgi.cmpn", version: "6.0.0"
    }
    
  4. DynamicIncludeインターフェイスを実装するOSGiコンポーネントクラスを作成します。

    ブログ用の動的インクルード実装の例を次に示します。

    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.osgi.service.component.annotations.Component;
    
    import com.liferay.portal.kernel.servlet.taglib.DynamicInclude;
    
    @Component(
    immediate = true,
    service = DynamicInclude.class
    )
    public class BlogsDynamicInclude implements DynamicInclude {
    
    @Override
    public void include(
    HttpServletRequest request, HttpServletResponse response,
    String key)
    throws IOException {
    
    PrintWriter printWriter = response.getWriter();
    
    printWriter.println(
    "<h2>Added by Blogs Dynamic Include!</h2><br />");
    }
    
    @Override
    public void register(DynamicIncludeRegistry dynamicIncludeRegistry) {
    dynamicIncludeRegistry.register(
    "com.liferay.blogs.web#/blogs/view_entry.jsp#pre");
    }
    
    }
    

    サービス属性service = DynamicInclude.classを持つ@Componentアノテーションをクラスに指定すると、クラスはDynamicIncludeサービスコンポーネントになります。

    @Component(
    immediate = true,
    service = DynamicInclude.class
    )
    

    includeメソッドで、コンテンツを追加します。このincludeメソッド例では、見出しを記述しています。

    @Override
    public void include(
    HttpServletRequest request, HttpServletResponse response,
    String key)
    throws IOException {
    
    PrintWriter printWriter = response.getWriter();
    
    printWriter.println(
    "<h2>Added by Blogs Dynamic Include!</h2><br />");
    }
    

    registerメソッドで、使用する動的インクルードタグを指定します。このregisterメソッド例では、ブログの上部にある動的インクルードview_entry.jspを対象としています。

    @Override
    public void register(DynamicIncludeRegistry dynamicIncludeRegistry) {
    dynamicIncludeRegistry.register(
    "com.liferay.blogs.web#/blogs/view_entry.jsp#pre");
    }
    

モジュールをデプロイすると、JSPにコンテンツが動的に含まれます。動的コンテンツをJSPに挿入できました。

« JSPのカスタマイズポートレットフィルターを使用したJSPのオーバーライド »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています