Liferay Dynamicly创建Instanceable Portlet的actionURL

Liferay Dynamicly创建Instanceable Portlet的actionURL,liferay,liferay-6,Liferay,Liferay 6,我一直在MVCPortlet控制器中以编程方式创建Liferay ActionURL。 到目前为止,我已经成功地创建了一个指向另一个portlet操作的工作链接, 使用以下代码放置在另一个页面中(布局(按Liferay术语): LiferayPortletResponse rr=portal.getLiferayPortletResponse(响应); 布局=…//我使用LayoutLocalServiceUtil设法获得正确的一个 LiferayPortletURL ddUrl=rr.crea

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

LiferayPortletResponse rr=portal.getLiferayPortletResponse(响应);
布局=…//我使用LayoutLocalServiceUtil设法获得正确的一个
LiferayPortletURL ddUrl=rr.createActionURL(“portlet_-WAR_-name”);
if(Validator.isNotNull(布局)){
//将信息设置到另一个portlet
setPlid(layout.getPlid());
//设置操作名称
setParameter(ActionRequest.ACTION_NAME,“actionFunctionNameOf_MVCPortlet”);
//添加任何与操作相关的参数
setParameter(“someParam1”,…);
setParameter(“someParam2”,…);
返回ddUrl;
}
我的问题是,这在可实例化的Portlet上不起作用

我是否可以添加一些参数,使这个url链接到目标Portlet的任何-实例

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

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


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

您可以将portletid设置为instanceableportlet id:

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

您可以将portletid设置为instanceableportlet id:

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

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

LiferayPortletResponse rr=portal.getLiferayPortletResponse(响应);
//我使用LayoutLocalServiceUtil获得正确的布局
布局=;
LiferayPortletURL ddUrl=rr.createActionURL(“portlet_-WAR_-name”);
if(布局!=null){
//将信息设置到另一个portlet
setPlid(layout.getPlid());
//设置操作名称
setParameter(ActionRequest.ACTION_NAME,“actionFunctionNameOf_MVCPortlet”);
//查找instanceable Portlet的完整portletId
LayoutTypePortlet LayoutTypePortlet=
LayoutTypePortletFactoryUtil.create(
LayoutLocalServiceUtil.getFriendlyURLLayout(
主题显示.getLayout().getGroupId(),
false,“页面友好的url”)
);
List-portletIdList=layoutTypePortlet.getPortletIds();
for(字符串prtId:portletIdList){
if(prtId.contains(“portlet\u WAR\u name”)){
ddUrl.setPortletId(prtId);
}
}
//添加任何与操作相关的参数
setParameter(“someParam1”,…);
setParameter(“someParam2”,…);
返回ddUrl;
}
Thanx向Tony Rad发送关于
setPortletId
的信息


我还发现它非常有用。

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

LiferayPortletResponse rr=portal.getLiferayPortletResponse(响应);
//我使用LayoutLocalServiceUtil获得正确的布局
布局=;
LiferayPortletURL ddUrl=rr.createActionURL(“portlet_-WAR_-name”);
if(布局!=null){
//将信息设置到另一个portlet
setPlid(layout.getPlid());
//设置操作名称
setParameter(ActionRequest.ACTION_NAME,“actionFunctionNameOf_MVCPortlet”);
//查找instanceable Portlet的完整portletId
LayoutTypePortlet LayoutTypePortlet=
LayoutTypePortletFactoryUtil.create(
LayoutLocalServiceUtil.getFriendlyURLLayout(
主题显示.getLayout().getGroupId(),
false,“页面友好的url”)
);
List-portletIdList=layoutTypePortlet.getPortletIds();
for(字符串prtId:portletIdList){
if(prtId.contains(“portlet\u WAR\u name”)){
ddUrl.setPortletId(prtId);
}
}
//添加任何与操作相关的参数
setParameter(“someParam1”,…);
setParameter(“someParam2”,…);
返回ddUrl;
}
Thanx向Tony Rad发送关于
setPortletId
的信息


我也觉得很有用。

谢谢你的回答。但是通过这种方式,我可以获得我的portlet的portlet\u ID,而不是我想要链接到的portlet。对于.setPortletId()方法的提示,我还是会投票支持你的。谢谢你的回答。但是通过这种方式,我可以获得我的portlet的portlet\u ID,而不是我想要链接到的portlet。对于.setPortletId()方法的提示,我仍然会投票支持您