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