9.5 Porlet 之间的通信方式-
PortletSession
-
PortletSession
-
Portlet URL 调用
-
Public render parameters
-
Portlet events
-
通过 URL传参
1.portlet之间通信
(1)portletA jsp页面设置表单
<%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState" %>
<%@page import="com.liferay.portal.util.PortalUtil" %>
<%@page import="com.liferay.portal.model.User" %>
<%@page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects/>
<portlet:actionURL var="updateForm" name="sendata"></portlet:actionURL>
<form action="<%=updateForm%>&urlparam=urlabc" method="post" name="<portlet:namespace/>form" >
用户名:<input type="text" name="id" id="<portlet:namespace/>userName">
<input type="submit" onclick="<portlet:namespace/>save()">
</form>
portlet:actionURL 请求后台,name与后台方法名保持一致
(2)portletA 接收 jsp 传过来的参数
public class PortletA extends MVCPortlet {
@Override
public void doView(RenderRequest renderRequest,
RenderResponse renderResponse) throws IOException, PortletException {
super.doView(renderRequest, renderResponse);
}
public void sendata(ActionRequest actionRequest,
ActionResponse actionResponse) throws IOException, PortletException {
String id = ParamUtil.getString(actionRequest, "id");
// 作用域必须设置为应用级别 APPLICATION_SCOPE
actionRequest.getPortletSession().setAttribute("id", id, PortletSession.APPLICATION_SCOPE);
}
(3)portletB 接收 session 传过来的参数
public class PortletB extends MVCPortlet {
@Override
public void doView(RenderRequest renderRequest,
RenderResponse renderResponse) throws IOException, PortletException {
// 取值也要加上作用域
String id = (String)renderRequest.getPortletSession().getAttribute("id", PortletSession.APPLICATION_SCOPE);
renderRequest.setAttribute("rid", id);
super.doView(renderRequest, renderResponse);
}
}
(4)portletB jsp 展示传过来的参数
<%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState" %>
<%@page import="com.liferay.portal.util.PortalUtil" %>
<%@page import="com.liferay.portal.model.User" %>
<%@page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects/>
接收ID:${rid}
(5)liferay-portlet.xml 中配置namespace不是必须(如果写namespace的话不用配置)
<icon>/icon.png</icon>
<!-- 配置namespace不是必须的 -->
<requires-namespaced-parameters>false</requires-namespaced-parameters>
<header-portlet-css>/css/main.css</header-portlet-css>