以编程方式将portlet添加到控制面板

时间:2012-12-28 09:18:44

标签: liferay

我想以编程方式将自定义portlet添加到控制面板。我该怎么做 ?

2 个答案:

答案 0 :(得分:1)

您可能已经知道在ControlPanel中可以使用哪个portlet(您编写的portlet数量有限,对吗?)您不需要将其完全编程,但实际上可以像任何其他ControlPanel一样声明它你有Portlet。 (有关信息,请参阅other question

但是,为了使您的管理portlet基于动态信息显示/消失,您可以使用此元素的声明(取自http://www.liferay.com/dtd/liferay-portlet-app_6_0_0.dtd

<!--
The control-panel-entry-class value must be a class that implements
com.liferay.portlet.ControlPanelEntry and is called by the Control Panel to
decide whether the portlet should be shown to a specific user in a specific
context. The default value is set in portal.properties.

See:

http://docs.liferay.com/portal/6.0/javadocs/portal-service/com/liferay/portlet/ControlPanelEntry.html
-->
<!ELEMENT control-panel-entry-class (#PCDATA)>

答案 1 :(得分:0)

我认为以编程方式不可能,因为:

  1. 控制面板页面上的portlet不存储在数据库中,门户网站中其他页面的情况也是如此,其中portlet在typeSettings表中存储为Layout

  2. 相反,控制面板页面上的portlet取决于_controlPanelEntryCategory中字段PortletImpl的值,该值表示liferay-portlet.xml<control-panel-entry-category>的值通过PortletLocalServiceImpl#_readLiferayPortletXML方法为每个portlet设置此值,我认为每次只在服务器启动时(在initEAR()中)或部署了一个portlet时调用initWAR() })。

  3. 因此,需要在liferay-portlet.xml中为不同的<control-panel-entry-*>标记添加条目才能将portlet添加到控制面板。这不可能以编程方式实现。

    这是根据我的推理和理解,但我想听听Liferay大师是否有可能。