2

我一直致力于在MVCPortlet控制器中以编程方式创建 Liferay actionUrls。到目前为止,我已经成功地创建了一个指向另一个 portlet 操作的工作链接,Layout使用以下代码放置在另一个页面中(用 Liferay 术语):

LiferayPortletResponse rr = PortalUtil.getLiferayPortletResponse( response);

Layout layout = ... // I manage to get the correct one using  LayoutLocalServiceUtil

LiferayPortletURL ddUrl = rr.createActionURL("portlet_WAR_name") ;

if(Validator.isNotNull(layout)){
    // Setting info to the other portlet
    ddUrl.setPlid(layout.getPlid());

    // Setting the action Name
    ddUrl.setParameter(ActionRequest.ACTION_NAME, "actionFunctionNameOf_MVCPortlet");

    // adding any action-related params
    ddUrl.setParameter("someParam1", ...) );
    ddUrl.setParameter("someParam2", ...) );

    return ddUrl;
}

我的问题是这不适用于可实例化的Portlet。

我可以添加一些参数来使这个 url 链接到-any-目标 Portlet 的实例吗?

还是我需要知道instanceId目标 Portlet 的名称?如果是这样,我该如何将其设置为LiferayPortletURL实例?

提前谢谢,任何帮助将不胜感激

PS:我正在使用 Liferay 6.1 GA1

4

2 回答 2

3

您可以将 portletid 设置为可实例化的portlet id:

String portletId = (String) request.getAttribute(WebKeys.PORTLET_ID);
ddUrl.setPortletId(portletId);
于 2012-11-20T22:50:16.540 回答
1

好的,我找到了方法,所以我分享:

LiferayPortletResponse rr = PortalUtil.getLiferayPortletResponse( response);

// I get the correct layout using  LayoutLocalServiceUtil
Layout layout = ... ;

LiferayPortletURL ddUrl = rr.createActionURL("portlet_WAR_name");

if(layout != null) {

    // Setting info to the other portlet
    ddUrl.setPlid(layout.getPlid());

    // Setting the action Name
    ddUrl.setParameter(ActionRequest.ACTION_NAME, "actionFunctionNameOf_MVCPortlet");

    //Finding the full portletId of the instanceable Portlet
    LayoutTypePortlet layoutTypePortlet =
        LayoutTypePortletFactoryUtil.create(
            LayoutLocalServiceUtil.getFriendlyURLLayout(
                themeDisplay.getLayout().getGroupId(), 
                false, "page_friendly_url")
        );

    List<String> portletIdList = layoutTypePortlet.getPortletIds();

    for(String prtId : portletIdList){
        if(prtId.contains("portlet_WAR_name")){
            ddUrl.setPortletId(prtId);
        }
    }

    // adding any action-related params
    ddUrl.setParameter("someParam1", ...) );
    ddUrl.setParameter("someParam2", ...) );

    return ddUrl;
}

感谢 Tony Rad的提示setPortletId

我还发现这个答案非常有用。

于 2012-11-21T10:22:11.813 回答