是否可以在 liferay 中创建没有请求对象的渲染 URL?
Is it possible in liferay to create a render URL without a request object?
我知道如何在我有 PortletRequest 时创建渲染 url 但如果我没有呢?
类似于:
PortletURLFactoryUtil.create(portletRequest, portletId, plid, lifecycle)
但没有 portletRequest。
在Liferay中,javax.portlet.PortletURL
是由com.liferay.portlet.PortletURLImpl
实现的。 PortletURLImpl
的每个构造函数都期望 PortletRequest
或 HttpServletRequest
作为参数。
所以,严格来说,使用 Liferay Java API,没有请求对象是不可能创建 portlet url。
如果您不想将请求对象作为参数传递给您的代码,您总是可以以某种方式将其隐藏起来。例如portlet:renderURL
JSP标签没有请求参数,但是从当前javax.servlet.jsp.PageContext
.
获取请求对象
同样,您的 Java 代码可以使用某种 portlet / servlet 过滤器,将请求对象存储在 ThreadLocal
或其他线程绑定存储中,并在请求处理期间将其保存在那里。
无论如何,portlet url 非常需要处理请求,所以我认为没有理由打扰。
答案是可以。
在javaScript
function(event) {
var portletURL = Liferay.PortletURL.createRenderURL();
portletURL.setParameter('groupId', '<%= scopeGroupId %>');
portletURL.setParameter('struts_action', '/journal/select_document_library');
portletURL.setPlid('<%= controlPanelPlid %>');
portletURL.setPortletId('15');
portletURL.setWindowState('pop_up');
Liferay.Util.openWindow(
{
id: '<portlet:namespace />selectDocumentLibrary',
uri: portletURL.toString()
}
);
}
转到 Creating Portlet URLs in JavaScript
或在 Jsp 页面中作为
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %>
<liferay-portlet:renderURL var="openPortletURL" copyCurrentRenderParameters="true" portletMode="<%=LiferayPortletMode.VIEW.toString() %>"
windowState="<%=LiferayWindowState.NORMAL.toString()%>">
<liferay-portlet:param name="param" value="This is from Liferay TAG"/>
</liferay-portlet:renderURL>
<a href="${openPortletURL}">Render Url created by Liferay TAG in JSP</a>
我知道如何在我有 PortletRequest 时创建渲染 url 但如果我没有呢? 类似于:
PortletURLFactoryUtil.create(portletRequest, portletId, plid, lifecycle)
但没有 portletRequest。
在Liferay中,javax.portlet.PortletURL
是由com.liferay.portlet.PortletURLImpl
实现的。 PortletURLImpl
的每个构造函数都期望 PortletRequest
或 HttpServletRequest
作为参数。
所以,严格来说,使用 Liferay Java API,没有请求对象是不可能创建 portlet url。
如果您不想将请求对象作为参数传递给您的代码,您总是可以以某种方式将其隐藏起来。例如portlet:renderURL
JSP标签没有请求参数,但是从当前javax.servlet.jsp.PageContext
.
同样,您的 Java 代码可以使用某种 portlet / servlet 过滤器,将请求对象存储在 ThreadLocal
或其他线程绑定存储中,并在请求处理期间将其保存在那里。
无论如何,portlet url 非常需要处理请求,所以我认为没有理由打扰。
答案是可以。 在javaScript
function(event) {
var portletURL = Liferay.PortletURL.createRenderURL();
portletURL.setParameter('groupId', '<%= scopeGroupId %>');
portletURL.setParameter('struts_action', '/journal/select_document_library');
portletURL.setPlid('<%= controlPanelPlid %>');
portletURL.setPortletId('15');
portletURL.setWindowState('pop_up');
Liferay.Util.openWindow(
{
id: '<portlet:namespace />selectDocumentLibrary',
uri: portletURL.toString()
}
);
}
转到 Creating Portlet URLs in JavaScript
或在 Jsp 页面中作为
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %>
<liferay-portlet:renderURL var="openPortletURL" copyCurrentRenderParameters="true" portletMode="<%=LiferayPortletMode.VIEW.toString() %>"
windowState="<%=LiferayWindowState.NORMAL.toString()%>">
<liferay-portlet:param name="param" value="This is from Liferay TAG"/>
</liferay-portlet:renderURL>
<a href="${openPortletURL}">Render Url created by Liferay TAG in JSP</a>