生成PORTLET URL
回想一下,用戶可以在一個頁面上放置多個portlet。作爲一名開發人員,您不知道會與哪些其他portlet共享一個頁面。這意味着不能像習慣的那樣爲應用程序中的各種功能定義URL。
例如,考慮一個用戶與博客應用程序放在同一頁面上的日曆應用程序。要實現刪除相應應用程序中的日曆事件和博客條目的功能,應用程序開發人員將該del
參數追加到URL中,併爲其提供主鍵值,以便應用程序可以查找和刪除日曆事件或博客條目。由於這兩個應用程序讀取此參數,它們的刪除功能會發生衝突
Liferay Portal的解決方案是由系統生成的URL。通過爲每項功能生成一個唯一的URL參數,Liferay Portal允許具有相同或相似功能的多個應用程序和諧共存。不幸的是,爲了保證portlet工作,必須手動添加對它的支持。幸運的是,這樣做非常簡單。
在view.jsp
,按照以下步驟在您的portlet中啓用系統生成的URL:
- 添加這些標籤
<%@ include file="/init.jsp" %>
到<aui:button-row>
標籤上方:<portlet:renderURL var="addEntryURL"> <portlet:param name="mvcPath" value="/edit_entry.jsp"></portlet:param> </portlet:renderURL>
<aui:button>
添加如下屬性,在標記value="Add Entry"
之前:onClick="<%= addEntryURL.toString() %>"
view.jsp
頁面現在應該如下所示:<%@ include file="/init.jsp" %> <portlet:renderURL var="addEntryURL"> <portlet:param name="mvcPath" value="/edit_entry.jsp"></portlet:param> </portlet:renderURL> <aui:button-row> <aui:button onClick="<%= addEntryURL.toString() %>" value="Add Entry"></aui:button> </aui:button-row>
The <portlet:renderURL>
tag’s var
attribute creates the addEntryURL
variable to hold the system-generated URL. The <portlet:param>
tag defines a URL parameter to append to the URL. In this example, a URL parameter named mvcPath
with a value of /edit_entry
is appended to the URL.
請注意,你的GuestbookPortlet
類(位於你的guestbook-web
模塊的com.liferay.docs.guestbook.portlet
包中)擴展了Liferay的MVCPortlet
類。在Liferay MVC portlet中,mvcPath
URL參數表示portlet中的頁面。要導航到portlet中的另一個頁面,請使用帶有參數的門戶網址mvcPath
鏈接到特定頁面。
在上面的例子中,你創建了一個renderURL
指向你的應用程序的edit_entry.jsp
頁面。請注意,使用AlloyUI按鈕來跟隨生成的URL不是必需的。您可以使用任何包含鏈接的HTML構造。用戶可以點擊你的按鈕訪問你的應用程序edit_entry.jsp
頁面。目前會產生一個錯誤,因爲edit_entry.jsp
還不存在。下一步創造edit_entry.jsp
。