2012-04-16 170 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