通常liferay
有ADD
选项用于显示可用的portlet。
我希望它们出现在下拉列表中,并且应该在自定义插件portlet中,所以我在API中搜索哪个方法正在检索可用的portlet,但我没有找到任何。
请帮助我,因为我坚持这一点,并且从下拉列表中选择应该将portlet添加到页面中。
答案 0 :(得分:1)
dockbar portlet显示“Add ... More”对话框。您可以在portal-web/docroot/html/portlet/dockbar/add_panel.jsp
的Liferay源代码中找到此UI部分的实现,其中还包含view_category.jsp
在同一目录中。
虽然这个jsp代码不是最漂亮的,但您很容易发现PortletLocalService
是您找到相关信息的代码,以及如何按类别访问portlet列表的实际示例,排序它们根据当前用户的语言环境等。
当你要求更具体的指示时:在add_panel.jsp
你可以找到:
for (PortletCategory curPortletCategory : categories) {
if (curPortletCategory.isHidden()) {
continue;
}
request.setAttribute(WebKeys.PORTLET_CATEGORY, curPortletCategory);
request.setAttribute(WebKeys.PORTLET_CATEGORY_INDEX, String.valueOf(portletCategoryIndex));
%>
<liferay-util:include page="/html/portlet/dockbar/view_category.jsp" />
<%
portletCategoryIndex++;
}
%>
以及view_category.jsp
的一些摘录:
<%
PortletCategory portletCategory = (PortletCategory)request.getAttribute(WebKeys.PORTLET_CATEGORY);
int portletCategoryIndex = GetterUtil.getInteger((String)request.getAttribute(WebKeys.PORTLET_CATEGORY_INDEX));
// ...
Set<String> portletIds = portletCategory.getPortletIds();
// ...
for (String portletId : portletIds) {
Portlet portlet = PortletLocalServiceUtil.getPortletById(user.getCompanyId(), portletId);
if ((portlet != null) && PortletPermissionUtil.contains(permissionChecker, layout, portlet, ActionKeys.ADD_TO_PAGE)) {
portlets.add(portlet);
// ... and so on
希望这段摘录有所帮助。请参阅文件的其余部分,了解您可以对结果列表实际执行的操作。此外,如果您需要更多详细信息,Portlet的界面可能会有所帮助。