将 portlet 移动到 liferay 7 中的控制面板部分?
Moving portlet to the control panel section in liferay 7?
如何将自定义 portlet 添加到“控制面板”部分?我看到了各种教程,但都是 liferay 6.2 的。如何在liferay 7中完成它?提前谢谢..
您可以通过组件的属性定义控制面板类别:
com.liferay.portlet.control-panel-entry-category=<String>
com.liferay.portlet.control-panel-entry-weight=<double>
在 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);
}
}
要编译它,您将依赖于 "Application List app" API - 我们可以在那里找到 PanelApp
class。因此,只需将此依赖项添加到您的 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 添加到“控制面板”部分?我看到了各种教程,但都是 liferay 6.2 的。如何在liferay 7中完成它?提前谢谢..
您可以通过组件的属性定义控制面板类别:
com.liferay.portlet.control-panel-entry-category=<String>
com.liferay.portlet.control-panel-entry-weight=<double>
在 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);
}
}
要编译它,您将依赖于 "Application List app" API - 我们可以在那里找到 PanelApp
class。因此,只需将此依赖项添加到您的 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 对此很有指导意义。