在控制面板中添加portlet时,整个初始过程是什么?

时间:2014-07-24 08:25:41

标签: liferay liferay-6

我上周正在参加面试,面试官问我,你如何在liferay中添加一个portlet? 我只是回答说,在eclipse中创建一个插件项目时,会出现Add to control panel选项,这是我在控制面板中添加portlet的方式。 Add to control panel 当你这样做时,他再次问起了Liferay最初做了什么,我就像没有答案一样。 任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

在部署portlet时,所有portlet都保存在portlet表中。然后,一旦访问控制面板,liferay就会加载所有具有控制面板条目的portlet。有关更好的说明,请参阅

中的以下代码
com.liferay.portal.util.PortalImpl

@Override
public Set<Portlet> getControlPanelPortlets(long companyId, String category)
    throws SystemException {

    Set<Portlet> portletsSet = new TreeSet<Portlet>(
        new PortletControlPanelWeightComparator());

    if (Validator.isNull(category)) {
        return portletsSet;
    }

    List<Portlet> portletsList = PortletLocalServiceUtil.getPortlets(
        companyId);

    for (Portlet portlet : portletsList) {
        String portletCategory = portlet.getControlPanelEntryCategory();

        if (category.equals(portletCategory) ||
            (category.endsWith(StringPool.PERIOD) &&
             StringUtil.startsWith(portletCategory, category))) {

            portletsSet.add(portlet);
        }
    }

    return portletsSet;
}

@Override
public List<Portlet> getControlPanelPortlets(
        String category, ThemeDisplay themeDisplay)
    throws SystemException {

    Set<Portlet> portlets = getControlPanelPortlets(
        themeDisplay.getCompanyId(), category);

    return filterControlPanelPortlets(portlets, themeDisplay);
}

调用上面的代码
\portal-web\docroot\html\portlet\control_panel_menu\view.jsp 
Map<String, List<Portlet>> siteAdministrationCategoriesMap = PortalUtil.getSiteAdministrationCategoriesMap(request);

如果我错了,专家会纠正我。