Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否将portlet移动到liferay 7中的控制面板部分?_Liferay_Liferay 7 - Fatal编程技术网

是否将portlet移动到liferay 7中的控制面板部分?

是否将portlet移动到liferay 7中的控制面板部分?,liferay,liferay-7,Liferay,Liferay 7,如何将自定义portlet添加到控制面板部分?我看过各种教程,但都是liferay 6.2的。如何在liferay 7中完成它?Thanx提前..您可以通过组件的属性定义控制面板类别: com.liferay.portlet.control-panel-entry-category= com.liferay.portlet.control-panel-entry-weight= 请参阅此处列出的映射: 在Liferay 7中,如果您使用捆绑包(例如,通过创建),则可以使用面板应用程序。面板应

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

您可以通过组件的属性定义控制面板类别:

com.liferay.portlet.control-panel-entry-category=
com.liferay.portlet.control-panel-entry-weight=

请参阅此处列出的映射:

在Liferay 7中,如果您使用捆绑包(例如,通过创建),则可以使用面板应用程序。面板应用程序将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将显示在清单中:


这只是一个基本的想法,它非常有启发性。

portlet必须是不可实例化的。请将其更改为false,以便portlet在控制面板中显示,将“com.liferay.portlet.instanceable=true”更改为“com.liferay.portlet.instanceable=false”,@suatCoskun更新。谢谢(我原以为我的例子曾经奏效,但那是很久以前的事了,所以我错过了一些东西……)