显示portlet中可用portlet列表的方法

时间:2013-04-27 19:04:09

标签: liferay portlet liferay-6

通常liferayADD选项用于显示可用的portlet。

我希望它们出现在下拉列表中,并且应该在自定义插件portlet中,所以我在API中搜索哪个方法正在检索可用的portlet,但我没有找到任何。

请帮助我,因为我坚持这一点,并且从下拉列表中选择应该将portlet添加到页面中。

1 个答案:

答案 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的界面可能会有所帮助。