【问题标题】:Moving portlet to the control panel section in liferay 7?将 portlet 移动到 liferay 7 中的控制面板部分?
【发布时间】:2017-03-17 02:29:20
【问题描述】:

如何将自定义 portlet 添加到控制面板部分?我看过各种教程,但都是 liferay 6.2。如何在liferay 7中完成它?提前谢谢..

【问题讨论】:

    标签: liferay liferay-7


    【解决方案1】:

    您可以通过组件的属性定义控制面板类别: com.liferay.portlet.control-panel-entry-category=<String> com.liferay.portlet.control-panel-entry-weight=<double>

    请参考此处列出的映射: https://dev.liferay.com/develop/reference/-/knowledge_base/7-0/portlet-descriptor-to-osgi-service-property-map

    【讨论】:

      【解决方案2】:

      在 Liferay 7 中,如果您使用捆绑包(例如,通过 Blade tools 创建),您可以使其与面板应用程序一起使用。面板应用程序将 portlet 映射到控制面板中的某个位置。

      假设您有一个由 Blade 生成的 portlet,如下所示:

      @Component(
          immediate = true,
          property = {
              "com.liferay.portlet.display-category=category.sample",
              "com.liferay.portlet.instanceable=false",
              "javax.portlet.name=cpportlet",
              "javax.portlet.display-name=Control Panel Portlet",
              "javax.portlet.security-role-ref=power-user,user"
          },
          service = Portlet.class
      )
      public class CpPortlet extends GenericPortlet {
      
          @Override
          protected void doView(
                  RenderRequest renderRequest, RenderResponse renderResponse)
              throws IOException, PortletException {
      
              PrintWriter printWriter = renderResponse.getWriter();
      
              printWriter.print("cp-portlet Portlet - Hello World!");
          }
      
      }
      

      现在您只需创建另一个实现PanelApp 服务的 OSGi 组件:

      @Component(
          immediate = true,
          property = {
              "panel.app.order:Integer=10000",   // Defines position in list
              "panel.category.key=" + PanelCategoryKeys.SITE_ADMINISTRATION_CONTENT // To appear in the "Content" session
          },
          service = PanelApp.class
      )
      public class CpPanelApp extends BasePanelApp {
      
          @Override
          public String getPortletId() {
              return "cpportlet";    // Same name of the portlet.
          }
      
          @Override
          @Reference(
              target = "(javax.portlet.name=cpportlet)",
              unbind = "-"
          )
          public void setPortlet(Portlet portlet) {
              super.setPortlet(portlet);
          }
      
      }
      

      要编译它,您将依赖“应用程序列表应用程序”API - 我们在那里找到 PanelApp 类。因此,只需将此依赖项添加到您的build.gradle,如下所示:

      dependencies {
          compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.0.0"
          compileOnly group: "javax.portlet", name: "portlet-api", version: "2.0"
          compileOnly group: "org.osgi", name: "org.osgi.compendium", version: "5.0.0"
      
          compileOnly group: "com.liferay", name: "com.liferay.application.list.api", version: "2.0.0"  // Dependency added
      }
      

      现在部署它,portlet 将出现在清单中:

      这只是基本概念——documentation 非常有启发性。

      【讨论】:

      • portlet 不能实例化。请将其更改为 false 以在控制面板中显示 portlet 将“com.liferay.portlet.instanceable=true”更改为“com.liferay.portlet.instanceable=false”,
      • @suatCoskun 已更新。谢谢! (我认为我的示例曾经有效,但这是前一段时间,所以我错过了一些东西......)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 2012-03-11
      • 1970-01-01
      相关资源
      最近更新 更多