生成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
。