在liferay中是否可以创建没有请求对象的渲染URL?

时间:2015-11-11 13:12:53

标签: java liferay

我知道如何在有PortletRequest的情况下创建渲染网址,但如果不这样做的话? 类似于:

if(currentIndex == (pages.count-1))
  {
        return nil;
   }

但没有portletRequest。

2 个答案:

答案 0 :(得分:3)

在Liferay中,$id= $this->input->get("id");com.liferay.portlet.PortletURLImpl实施。 javax.portlet.PortletURL的每个构造函数都需要PortletURLImplPortletRequest作为参数。

因此,严格来说,使用Liferay Java API,如果没有请求对象,就无法创建portlet URL。

如果您不想将请求对象作为参数传递给您的代码,您总是可以以某种方式隐藏它。例如,HttpServletRequest JSP标记没有请求参数,但它从当前portlet:renderURL获取请求对象。

类似地,您的Java代码可以使用一种portlet / servlet过滤器,它将请求对象存储在javax.servlet.jsp.PageContext或其他线程绑定存储中,并在请求处理期间将其保留在那里。

无论如何,portlet url非常受限于请求处理,我认为没有理由打扰。

答案 1 :(得分:1)

答案是肯定的。 在javaScript中

VARBINARY(16)

转到Creating Portlet URLs in JavaScript

或在Jsp页面中

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 Render Url using liferay-portal