IPC public render parameters:
There are 3 ways to share the data between 2 portlets.
1.Portlet session
2.IPC Mechanisms
a. Public Render Parameters
b. Event
c. Client-Side IPC
3.Cookies
public render parameter is introduced in JSR 286 (Portlet Specification 2.0).
--> To implement public render parameter, we need to declare the parameter as public in portlet.xml file of both portlets.
--> In this example I am taking "bookName" is the public render parameter.
---> 1. In portlet.xml of portlet X , before
<supported-public-render-parameter>bookName</supported-public-render-parameter>
---> 2. In portlet.xml of portlet X , after
tag add below lines
<public-render-parameter>
<identifier> bookName </identifier>
<qname xmlns:x="http://abc.com">x:bookName
</public-render-parameter>
---> 3. Do the same things for the portlet.xml of portlet Y.
portlet.xml after
adding above code:
xml version="1.0"?>
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0">
<portlet>
<portlet-name>ipc-render-x</portlet-name>
<display-name>Ipc Render X</display-name>
<portlet-class>com.test.IpcRenderX</portlet-class>
<init-param>
<name>view-template</name>
<value>/html/ipcrenderx/view.jsp</value>
</init-param>
<init-param>
<name>edit-template</name>
<value>/html/ipcrenderx/edit.jsp</value>
</init-param>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>view</portlet-mode>
<portlet-mode>edit</portlet-mode>
</supports>
<resource-bundle>content/Language</resource-bundle>
<portlet-info>
<title>Ipc Render X</title>
<short-title>Ipc Render X</short-title>
<keywords></keywords>
</portlet-info>
<security-role-ref>
<role-name>administrator</role-name>
</security-role-ref>
<security-role-ref>
<role-name>guest</role-name>
</security-role-ref>
<security-role-ref>
<role-name>power-user</role-name>
</security-role-ref>
<security-role-ref>
<role-name>user</role-name>
</security-role-ref>
<supported-public-render-parameter>bookName</supported-public-render-parameter>
</portlet>
<public-render-parameter>
<identifier>
bookName
</identifier>
<qname xmlns:x="http://abc.com">x:bookName</qname>
</public-render-parameter>
</portlet-app>
View.jsp of Portletx:
<%@taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %>
<%@ taglib uri="http://alloy.liferay.com/tld/aui" prefix="aui" %>
<portlet:defineObjects />
<liferay-portlet:actionURL var ="actionURL" name="saveRenderParameter"/>
<aui:form name="fm" action="<%=actionURL.toString()%>">
<aui:input name="bookName" lable="Enter Book Name" />
<aui:button type="submit" value="Click" />
</aui:form>
Controller class of PortletX:
package com.test;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.util.bridges.mvc.MVCPortlet;
/**
* Portlet implementation class IpcRenderX
*/
public class IpcRenderX extends MVCPortlet {
public void saveRenderParameter(ActionRequest actionRequest, ActionResponse actionResponse){
System.out.println("From the saveRenderParameter() method");
String bookName= ParamUtil.getString(actionRequest, "bookName");
System.out.println("book name is "+bookName);
actionResponse.setRenderParameter("bookName", bookName);
}
}
View.jsp of portletY to get the public render parameter:
<%@page import="com.liferay.portal.kernel.util.ParamUtil"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://alloy.liferay.com/tld/aui" prefix="aui" %>
<%
String bookName = ParamUtil.getString(request, "bookName");
%>
<H3>Public parameter name is bookName</H3>
<H3>Its value is </H3>
<%=bookName %>