2012-04-16 131 views
1

这个线程不是一个问题,当我通过Liferay论坛讨论使用PortletURL时引发了一个疑问。为什么要使用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. 对于actionURL:

    PortletURL actionURL = renderResponse.createActionURL(); 
    

有谁请告诉我,在这种情况下PortletURL将是有益的?

+1

Portlet是父页面内的迷你页面。普通网址在这种情况下不起作用。您必须为Portlet容器提供一种确定哪个Portlet与之通信的方法。它的结构取决于实现,它由Portlet容器以某种方式生成。 – dragon66 2012-04-16 21:17:54

+2

@ dragon66:这是一个很好的答案。你发表评论而不是回答的任何原因? – 2012-04-16 22:02:21

回答

8

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

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

编辑:添加类型的PortletURL及其差异和用法,评论来自@PrakashK。

有两种类型PortletURLs的:

  1. 行动网址,它们触发动作请求,随后呈现请求。
  2. 呈现URL,它们触发呈现请求。

因此,ActionURL的目的是触发某种操作 - 例如按下按钮。动作请求将被portlet容器拦截并发送到相应的动作请求处理程序,该处理程序处理动作请求并设置渲染阶段使用的必要渲染参数。在portlet的生命周期中,呈现请求总是遵循动作请求。另一方面,RenderURl,正如其名称所暗示的,主要用于呈现portlet。

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

希望以上信息对您有用。

+2

非常好的答案 – 2012-04-17 05:14:23

+2

我从这个问题中了解到,Gajjini想知道为什么以及上述两个案例中的哪个portletURL是有用的,而不一定是“为什么要使用portletURL?”。你能否澄清Gajjini? @ dragon66:虽然这个答案很好,很有用。谢谢 – 2012-04-17 08:11:25

+0

@PrakashK:感谢您的评论。将增加更多。 – dragon66 2012-04-17 12:10:05