2013-04-27 81 views
1

一般liferay有一個用於顯示可用的portlet ADD選項。方法在portlet中顯示可用的portlet的列表

我希望他們能夠出現在下拉列表,這應該是一個自定義插件的portlet,所以我正在尋找在API哪種方法檢索可用的portlet,但我沒有發現任何。

請幫我在這,因爲我堅持了這一點,也從下拉Portlet應該被添加到頁面中選擇。

+0

沒有必要在你的問題中添加簽名。也學會使用格式來提高你的問題的可讀性。 – Apurv 2013-04-27 19:11:50

回答

1

「添加...更多」是由停靠欄的Portlet顯示的對話框。您可以在Liferay的源代碼portal-web/docroot/html/portlet/dockbar/add_panel.jsp中找到此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的界面可能會有所幫助。

+0

你能否詳細說明你的答案。我沒有發現任何有用的東西適用於我的要求。 – 2013-04-29 20:02:05