Friendly URLs for Liferay Portlets
2011-09-20 15:53
381 查看
标准的portletURLs 并不能算是简洁的:
liferay 6 中提供了一个非常好的方法来控制portal为portlet生成URL。使用此方法后,URL如下:
此URL是由/-/符分割的两部分组成。前半部分和通常的情况是一样,用来识别页面。后半部分用来识别portlet并包含一些关键的信息。
这两个URL的优缺点应该很明显吧?
以下步骤将假设你已经安装了lifray以及plugin SDK,并且知道如何开发liferayportlet。
首先,需要创建一个新的类,它将继承BaseFriendlyURLMapper基类,该基类实现了FriendlyURLMapper接口。
1 the getMapping method
此方法必须返回一个映射的标识符。liferay使用此映射标识符识别URL所引用的portlet。它通常出现在/-/字符后。应该保证自定义的URL以此标识符开始。我们仅仅使用此方法返回URLmapper的唯一标识符。
2 the buildPath method
此方法构建friendlyURL。可在此方法中实现URL的生成逻辑。
此方法的输入参数类型为:LiferayPortletURL。
返回所要生成的friendlyURL,或null(当不能正确构建时)。返回null,将会导致通常的portletURL的生成。
对于每一个你不想在URL中显示的参数(如p_p_id),需要调用portletURL.addParameterIncludedInPath(“p_p_id”)。
3 the getPortletId method
此方法主要取得portlet的id值。方便在populateParams方法中使用。
注意:此id值仅仅是portlet的值,而不包括instanceid。
4 the populateParams method
URL映射标识符作出的每次请求,liferay都会调用此方法。它映射我们从查询字符串中删除的的参数,并添加到参数路径中。与buildPath方法相反!
liferay-portlet.xml
到此映射类已经完成,我们需要告诉liferay启用它。在portlet声明中添加friendly-url-mapper-class声明。应在</icon>之后<instanceable>之前添加。
http://localhost:8080/web/guest/home? p_p_id=mygreeting_WAR_mygreetingportlet&p_p_lifecycle=0&p_p_state=normal &p_p_mode=view&p_p_col_id=column-1&_mygreeting_WAR_mygreetingportlet_jspPage=%2Fedit.jsp
liferay 6 中提供了一个非常好的方法来控制portal为portlet生成URL。使用此方法后,URL如下:
http://localhost:8080/web/guest/home/-/my-greeting/edit
此URL是由/-/符分割的两部分组成。前半部分和通常的情况是一样,用来识别页面。后半部分用来识别portlet并包含一些关键的信息。
这两个URL的优缺点应该很明显吧?
以下步骤将假设你已经安装了lifray以及plugin SDK,并且知道如何开发liferayportlet。
首先,需要创建一个新的类,它将继承BaseFriendlyURLMapper基类,该基类实现了FriendlyURLMapper接口。
1 the getMapping method
此方法必须返回一个映射的标识符。liferay使用此映射标识符识别URL所引用的portlet。它通常出现在/-/字符后。应该保证自定义的URL以此标识符开始。我们仅仅使用此方法返回URLmapper的唯一标识符。
public String getMapping() { return "seoPortlet"; }
2 the buildPath method
此方法构建friendlyURL。可在此方法中实现URL的生成逻辑。
此方法的输入参数类型为:LiferayPortletURL。
返回所要生成的friendlyURL,或null(当不能正确构建时)。返回null,将会导致通常的portletURL的生成。
对于每一个你不想在URL中显示的参数(如p_p_id),需要调用portletURL.addParameterIncludedInPath(“p_p_id”)。
public String buildPath(final LiferayPortletURL portletURL) { String friendlyURLPath = null; // get the value final String portletId =portletURL.getPortletId(); final String eventName =GetterUtil.getString(portletURL.getParameter("event")); if (Validator.isNotNull(portletId)&& Validator.isNotNull(eventName)) { friendlyURLPath= StringPool.FORWARD_SLASH + "seoPortlet"+ StringPool.FORWARD_SLASH +portletId + StringPool.FORWARD_SLASH + eventName; portletURL.addParameterIncludedInPath("event"); } // add other pararmeters if (Validator.isNotNull(friendlyURLPath)){ portletURL.addParameterIncludedInPath("p_p_id"); } return friendlyURLPath; }
3 the getPortletId method
此方法主要取得portlet的id值。方便在populateParams方法中使用。
注意:此id值仅仅是portlet的值,而不包括instanceid。
private String portletId; public String getPortletId() { return portletId; }
4 the populateParams method
URL映射标识符作出的每次请求,liferay都会调用此方法。它映射我们从查询字符串中删除的的参数,并添加到参数路径中。与buildPath方法相反!
public void populateParams(final String friendlyURLPath, final Map<String,String[]> params) { // get the values final String[] parts = StringUtil.split(friendlyURLPath,StringPool.SLASH); portletId = parts[2]; final String event = parts[3]; final String namespace = getNamespace(); params.put("p_p_id", new String[]{portletId}); params.put("p_p_state", new String[]{WindowState.NORMAL.toString()}); params.put(namespace +"event", new String[]{event}); }
liferay-portlet.xml
到此映射类已经完成,我们需要告诉liferay启用它。在portlet声明中添加friendly-url-mapper-class声明。应在</icon>之后<instanceable>之前添加。
<friendly-url-mapper-class>com.sample.FriendlyURLMapper</friendly-url-mapper-class>
相关文章推荐
- Friendly URLs for Liferay Portlets
- Introducing ASP.NET FriendlyUrls-cleaner URLs,easier Routing, and Mobile Views for ASP.NET Web Forms
- liferay-portlet.xml for Friendly URL mapping in Liferay
- 为Windows mobile编写设计友好的控件[Writing designer friendly controls for Windows Mobile]
- Friendly URLs in Tapestry
- Liferay+Spring Friendly URL mapping
- Creating something from nothing [Developer-friendly virtual file implementation for .NET!]
- 27. Retrofit2 -- How to Use Dynamic Urls for Requests
- SAP Direct Browsing URLs for Pentesting
- about build portlets for Domino
- FriendlyARM BIOS for 2440 移植内核
- [JAVA][Liferay] Duplicate key value violates unique constraint for resourcepermissionid in Liferay
- Liferay 6.1开发学习(十六):FriendlyURL的使用
- An Open-Source JavaScript Library for Mobile-Friendly Interactive Maps
- Use Categories in Product URLs for Magento SEO without Duplicate Content
- liferay service builder Could not reserve enough space for object heap
- Creating something from nothing, asynchronously [Developer-friendly virtual file implementation for
- dubbo Ignore empty notify urls for subscribe url
- Microsoft.AspNet.FriendlyUrls发布到IIS后404报错的解决方案
- 一个令人蛋疼的 Microsoft.AspNet.FriendlyUrls