2

私は、MVCPortletコントローラーでLiferay actionUrlsをプログラムで作成することに取り組んできました。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;
}

私の問題は、これがインスタンス化可能なポートレットでは機能しないことです。

-any-この URL をターゲット ポートレットのインスタンスにリンクさせるために追加できるパラメータはありますか?

instanceIdまたは、ターゲット ポートレットのを知る必要がありますか? もしそうなら、どうすればこれをLiferayPortletURLインスタンスに設定できますか?

事前に感謝します。どんな助けでも本当に感謝します

PS: Liferay 6.1 GA1 を使用しています。

4

2 に答える 2

3

portletid をインスタンス化可能なポートレット 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 に答える