Liferay技术问题:如何在一个Portlet中条件渲染另一个Portlet?
问题解答
首先明确:portlet:renderURL这个方向不对,它的作用是生成当前Portlet的渲染请求URL,用来触发自身的Render阶段动作(比如刷新自身内容、分页跳转),没办法直接用来渲染另一个Portlet。
正确的做法是使用Liferay提供的<liferay-portlet:render>标签,它专门用于在JSP中嵌入渲染其他Portlet。具体实现步骤如下:
在你的Portlet后端逻辑中,从数据库获取标志位,将其存入请求属性或Model中(比如命名为
showTargetPortlet)。在JSP视图中,通过条件判断结合
<liferay-portlet:render>标签渲染目标Portlet:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="liferay-portlet" uri="http://liferay.com/tld/portlet" %> <%-- 根据标志位判断是否渲染目标Portlet --%> <c:if test="${showTargetPortlet}"> <%-- 替换成目标Portlet的portletId,即portlet.xml中定义的<portlet-name>值 --%> <liferay-portlet:render portletName="com_yourcompany_TargetPortlet"> <%-- 可选:如果需要给目标Portlet传递参数,添加以下标签 --%> <portlet:param name="paramKey" value="paramValue" /> </liferay-portlet:render> </c:if>
关键注意点
- 目标Portlet必须已部署到Liferay,且当前页面有权限访问该Portlet
portletName要使用目标Portlet的完整标识:如果是传统WAR包Portlet,就是portlet.xml里的<portlet-name>;如果是OSGi模块Portlet,格式通常为[Bundle-SymbolicName]_[Portlet-Name]- 若需要更灵活的渲染控制,也可以通过
liferay-portlet:include结合生成的渲染URL实现,效果和上面的写法一致
内容的提问来源于stack exchange,提问作者Sumit Wadhwa
相关产品推荐
相关产品推荐

