为什么要使用PortletURL?

时间:2012-04-16 20:15:48

标签: liferay

这个帖子不是问题,当我通过Liferay论坛讨论使用PortletURL时,这是一个疑问。

在某些情况下,我在javscript方法

中看到了这个PortletURL
function createRowURL() {
   var portletURL = new Liferay.PortletURL();
   portletURL.setParameter("rowNumber", "25" );
   return portletURL.toString();
}

在某些情况下,我会在doView方法中看到此PortletURL,如图所示

获取currentURL:

PortletURL url = PortletURLUtil.getCurrent(renderRequest, mimeResponse or renderResponse)

从renderResponse创建PortletURL:

  1. 对于RenderURL:

    PortletURL renderURL = renderResponse.createRenderURL(); 
    
  2. for actionURL:

    PortletURL actionURL = renderResponse.createActionURL();
    
  3. 有人可以告诉我在哪种情况下PortletURL会有用吗?

1 个答案:

答案 0 :(得分:8)

Portlet应用程序与普通Web应用程序不同。 Portlet是称为门户网站的父页面内的迷你页面,多个门户网站成为一本书(Weblogic术语)。普通URL在这种情况下不起作用。除了上面给出的原因,portlet具有不同状态的生命周期。您必须为Portlet容器提供一种方法来确定哪个Portlet与它进行通信以及它处于什么状态 - 例如Portlet的窗口状态 - 是最小化,最大化还是正常。当然,PortletUrl的另一个重要功能是携带请求参数。如果您正在查看PortletURL,您肯定会看到很多奇特的名称以及您提供的请求参数。

虽然PortletURL所需的大多数信息在许多情况下都很常见,但PortletURL的结构依赖于实现,它由Portlet容器以这种或那种方式生成。自从我上一次的生活经历以来已经有一段时间了。我从未在我的应用程序中使用liferay特定的javascript。我使用自己的javascript / ajax与门户网站容器进行通信。所以我只是猜测你呈现的javascript方式也是特定于liferay的,并且不会在不同的门户框架之间移植。

编辑:在@PrakashK发表评论后添加了PortletURL类型及其差异和用法。

有两种类型的PortletURL:

  1. 操作URL,它们会触发一个操作请求,后跟一个渲染请求。
  2. 渲染网址,它们会触发渲染请求。
  3. 因此,ActionURL的目的是触发某种动作 - 例如按下按钮。操作请求将被portlet容器拦截并发送给适当的操作请求处理程序,处理程序处理操作请求并设置渲染阶段要使用的必要渲染参数。在portlet的生命周期中,呈现请求始终跟在动作请求之后。另一方面,正如其名称所示,RenderURl主要用于呈现portlet。

    由于RenderURL的“呈现”特性,在JSR168(Portlet 1.0)中,您无法直接通过portlet提供动态生成的资源。唯一的解决方法是使用额外的servlet来提供资源。这种方法的最大问题是Servlet无法参与portlet的生命周期。指向同一portlet Web应用程序中的资源的直接链接无法保证通过门户网站服务器,并且不具有可用的portlet上下文。为了解决这个问题,在JSR286(Portlet 2.0)中,引入了一项称为资源服务的功能和一种名为ResourceURL的新URL,以使portlet能够动态地为资源提供服务。 ResourceURL不是PortletURL,尽管它们扩展了相同的BaseURL。 ResourceURL和ActionURL之间的最大区别是ResourceURL不会触发渲染请求。这使得对资源的Ajax请求成为可能。

    有关Portlet 2.0的更多信息,请参阅 [JSR286]

    希望以上信息对您有用。