Java 在liferay中,是否可以在没有请求对象的情况下创建呈现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

当我有PortletRequest时,我知道如何创建呈现url,但如果我没有? 类似于:

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
——没有请求就不能使用它。