LIFERAY 6.2 - 将Web内容发送到另一个页面的另一个Portlet

时间:2016-11-09 19:11:58

标签: java liferay liferay-6

我正在使用Liferay 6.2,而且我很难在另一个portlet“portlet-asset-publisher”中显示“portlet-journal-content-search”的网页内容,该内容保留在另一个页面中。

我更大的困难是,我需要在搜索网页内容之后,系统显示所有结果,其中包含用于“显示页面”的链接,以及portlet“portlet-asset-publisher”。每个结果都必须动态生成一个链接,因为每个结果都有一个不同的“显示页面”。

我试图在代码中找到有关网页内容“显示页面”的信息,但我没有找到它。

我以为我会使用Liferay标签“renderURL”来做这件事,但我不知道我将如何发送我的内容以及如何动态获取“显示页面”!

今天当我点击要重定向到我的内容的链接时,我会转到相同的页面和portlet“.portlet-journal-content”。 代码如下:

<%
PortletURL webContentPortletURL = PortletURLFactoryUtil.create(request,             targetPortletId, plid, PortletRequest.RENDER_PHASE);
 
webContentPortletURL.setParameter("struts_action", "/journal_content/view"); 
      webContentPortletURL.setParameter("groupId",
   
String.valueOf(articleGroupId));
      webContentPortletURL.setParameter("articleId", articleId); 
%> 
<br />
<a href="<%= webContentPortletURL.toString() %>"><%= StringUtil.shorten(webContentPortletURL.toString(), 100) %></a>

但我需要重定向到我的内容的“显示页面”(ScreenShot页面的“TestandoPagina”名称),并且必须在portlet“.portlet-asset-publisher”上显示。 我试图做的代码,但它不起作用,是:

<portlet:defineObjects />
<liferay-theme:defineObjects />
<%
String portletId = PortletKeys.ASSET_PUBLISHER;
long otherPlid = PortalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), portletId);
 %>
  
<liferay-portlet:renderURL var="testURL" plid="<%=otherPlid%>" portletName="<%=portletId%>">
<liferay-portlet:param name="groupId" value="<%= String.valueOf(articleGroupId) %>" />
<liferay-portlet:param name="articleId" value="<%= articleId %>" />
</liferay-portlet:renderURL>

<br /><a href="<%= testURL %>"><%= StringUtil.shorten(testURL.toString(), 100) %></a>

有人可以帮助我吗? 非常感谢你。

以下是“如何使用”的截图:

A Web Content example with his "Display Page" called "TestandoPagina"

然后我在“.portlet-journal-content-search”搜索网页内容。

The result of my research with the "wrong" Links

当我今天点击此链接时会发生什么,我保持在同一页面“Processos”,我的内容显示在“.portlet-journal-content”,我想去他的“显示页面”,在此示例名为“TestandoPagina”,内容显示在“.portlet-asset-publisher”。

1 个答案:

答案 0 :(得分:0)

我做到了!

这样做的要点是:

1st - 知道“layoutUuid”是Web内容“显示页面”的ID,因此我可以获得PLID,属于该页面的所有PortletIds等信息。

第二 - 获取“文档”的信息我可以创建一个“AssetEntry”。

这是我获取“显示页面”信息的方式:

<%   
 ResultRow row = (ResultRow) request.getAttribute(WebKeys.SEARCH_CONTAINER_RESULT_ROW);
 Object[] objArray = (Object[])row.getObject();
 Document doc = (Document)objArray[1];
 
 String layoutUuid = doc.get("layoutUuid");
 
 Layout specificLayout = LayoutLocalServiceUtil.getLayoutByUuidAndCompanyId( layoutUuid, PortalUtil.getDefaultCompanyId() );
 
specificPlid = specificLayout.getPlid();    
articleLayoutTypePortlet = (LayoutTypePortlet) specificLayout.getLayoutType();

List<Portlet> allPortlets = articleLayoutTypePortlet.getAllPortlets();
for (Portlet portlet : allPortlets){
         if ( PortletKeys.ASSET_PUBLISHER.equals( portlet .getRootPortletId() ) ) {
                portletId = PortletKeys.ASSET_PUBLISHER + PortletConstants.INSTANCE_SEPARATOR + portlet .getInstanceId();
                break;
         }
}
%>

之后,我创建AssetEntry以获取“assetEntryId”,然后最终创建dinnamic链接:

<% 
 String className = doc.get("entryClassName");
 Long classPk = Long.parseLong( doc.get("entryClassPK") );
 
 AssetEntry assetEntry = AssetEntryLocalServiceUtil.getEntry(className, classPk);
 Long assetEntryId = assetEntry.getEntryId();
 
 webContentPortletURL = PortletURLFactoryUtil.create(request, portletId, specificPlid, PortletRequest.RENDER_PHASE);
 webContentPortletURL.setParameter( "struts_action", "/asset_publisher/view_content" ); 
webContentPortletURL.setParameter( "groupId", String.valueOf(articleGroupId) );
webContentPortletURL.setParameter( "type", "content" );
webContentPortletURL.setParameter( "assetEntryId", String.valueOf(assetEntryId) );
webContentPortletURL.setParameter( "articleId", articleId );  
 %>

我在“journal_content_search / article_content.jsp”所做的所有更改

我希望这可以帮助很多人!