Java 在liferay中,是否可以在没有请求对象的情况下创建呈现URL?
当我有PortletRequest时,我知道如何创建呈现url,但如果我没有? 类似于:Java 在liferay中,是否可以在没有请求对象的情况下创建呈现URL?,java,liferay,Java,Liferay,当我有PortletRequest时,我知道如何创建呈现url,但如果我没有? 类似于: PortletURLFactoryUtil.create(portletRequest, portletId, plid, lifecycle) 但是没有portletRequest。在Liferay中,javax.portlet.PortletURL由实现。PortletURLImpl的每个构造函数都期望PortletRequest或HttpServletRequest作为参数 因此,严格地说,使用Li
PortletURLFactoryUtil.create(portletRequest, portletId, plid, lifecycle)
但是没有portletRequest。在Liferay中,
javax.portlet.PortletURL
由实现。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()
}
);
}
功能(事件){
var portletURL=Liferay.portletURL.createRenderURL();
setParameter('groupId','');
setParameter('struts_action','/journal/select_document_library');
portletURL.setPlid(“”);
portletURL.setPortletId('15');
portletURL.setWindowsState('pop_up');
Liferay.Util.openWindow(
{
id:“selectDocumentLibrary”,
uri:portletURL.toString()
}
);
}
后藤
或者在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>
Goto答案不错,但我认为它没有抓住要点:第一个选项仅在浏览器中可用,而OP似乎是在服务器上搜索某些内容。第二个选项是隐式访问
PortletRequest
——没有请求就不能使用它。