【问题标题】:Dynamicaly Create actionURL to Instanceable Portlet动态创建可实例化 Portlet 的操作 URL
【发布时间】:2012-11-22 14:29:28
【问题描述】:

我一直致力于在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;
}

我的问题是这不适用于instanceable Portlet。

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

或者我是否需要知道目标 Portlet 的instanceId?如果是这样,如何将其设置为 LiferayPortletURL 实例?

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

P.S.:我正在使用 Liferay 6.1 GA1

【问题讨论】:

    标签: liferay liferay-6


    【解决方案1】:

    您可以将 portletid 设置为 instanceable portlet id:

    String portletId = (String) request.getAttribute(WebKeys.PORTLET_ID);
    ddUrl.setPortletId(portletId);
    

    【讨论】:

    • 感谢您的回答。但是这样我可以获得我的 portlet 的 PORTLET_ID,而不是我想要链接到的 Portlet。对于 .setPortletId() 方法的提示,我仍然会投票支持您
    【解决方案2】:

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

    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 上的hint

    我还发现this answer 非常有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 2020-06-22
      相关资源
      最近更新 更多