Liferay 6.1开发学习(十六):FriendlyURL的使用

2012年12月23日 Liferay 评论 2 条 阅读 10,823 views 次

Lifery中提供了一个叫FriendlyURL的东西来方便进行URL的管理和使用,FriendlyURL可以翻译为易记URL或友好URL。主要分为三种FriendlyURL,一种为站点的FriendlyURL,一种为页面的FriendlyURL,一种为Portlet的FriendlyURL。

站点的FriendlyURL

Liferay的页面URL一般为/web/xxx/xxx,其中web后面的即为站点的名称,如默认的为guest。站点的FriendlyURL可以在管理-->站点设置-->基本信息-->站点URL-->友好URL里面修改。

使用FriendlyURL好处是可以更清晰的表达语义,默认的是一个数字串,我们可以使用拼音或者英文字母表达这个站点的含义,比如可以使用公司名称等。

站点URL的获取,可以在代码中使用如下的方法:group.getFriendlyURL();

站点设置站点的易用URL

页面的FriendlyURL

页面的FriendlyURL和站点的FriendlyURL的作用差不多。可以通过如下方法进行修改。

管理-->页面-->友好URL,可以在这里输入相应的名称作为FriendlyURL。如下图。

页面URL的获取在代码中可以使用:layout.getFriendlyURL();

页面的易用URL使用页面的FriendlyURL的好处个人感觉有两点:

1、如站点FriendlyURL一样,可以清晰的表达语义。

2、可以帮助我们固定页面,在默认中页面的FreindlyURL是一个数字,这个数字的生成是按照页面的添加顺序来的,在实际开发中,有一些页面的地址可能需要写在代码中, 但是在添加页面的时候,由于某些原因可能并不能保证每一个站点的的页面的添加顺序就是一样的,如在A站点中添加的新闻查看的页面可能是1,但是在b站点中页面的地址可能是12,但是他们都是新闻查看,这个时候就可以为这两个页面都将FriendlyURL设置为newsview,通过FreindlyURL来保持地址的一致性。

Portlet的FriendlyURL

portlet的FriendlyURL并不能通过简单的配置来实现,需要编写一些代码来完成。如Liferay的官方网站,有这样的一个地址,http://www.liferay.com/marketplace/-/mp/category/11232560,则这就是一个portlet的FriendlyURL,这个里面的-后面的即为portlet的FriendlyURL。

Portlet的FriendlyURL可以帮助我们屏蔽一些不必要的URL信息,普通的portlet的信息,则是如下面这样的一个大长串:http://localhost:8080/web/hqw/2?p_auth=b9fBsvH4&p_p_id=cmslinkmanager_WAR_cmsportlet&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_cmslinkmanager_WAR_cmsportlet_jspPage=%2Fhtml%2FCmsLinkManager%2Fview.jsp&_cmslinkmanager_WAR_cmsportlet_javax.portlet.action=viewLink

这样的一长串地址,显然对用户是不太友好的,对于普通的Portlet应用,不关心也无所谓。但在一些特殊的Portlet中,我们需要在在其他地方引用时就不太方便,可以使用FriendlyURL来简化portlet的URL信息。

首先确定要对哪一个portlet的URL作FreindlyURL,如现在我们有一个新闻的RSS输出的Portlet,需要对不同的新闻栏目进行RSS的输出,我们希望URL的信息尽可能的简短,方便用户订阅。实现的目标如下:

http://xxx/web/hqw/rss/-/rss/ 这个地址为订阅全部栏目的新闻

http://xxx/web/hqw/rss/-/rss/123 这个地址为订阅栏目ID为123的新闻,则实现方法如下:

一、首先在Liferay-portlt.xml里面找到此RSS输出的Portlet,在此portlet的配置里面添加如下信息:

<friendly-url-mapper-class>com.liferay.portal.kernel.portlet.DefaultFriendlyURLMapper</friendly-url-mapper-class>
 <friendly-url-mapping>rss</friendly-url-mapping>
 <friendly-url-routes>xx/xx/portlet/cmsarticlerss/cmsrss-friendly-url-routes.xml</friendly-url-routes>

friendly-url-mapper-class:此配置参考上面的即可,不需要自定义。

friendly-url-mapping:为此portlet定义的FriendlyURL,如这里定义为rss,即是http://xxx/web/hqw/rss/-/rss/这里面-后面的rss。

friendly-url-routes:portlet的定义规则的xm的路径,这里是包名。

二、编辑第一步中定义的cmsrss-friendly-url-routes.xml文件,xml文件的参考配置信息如下:

<?xml version="1.0"?>
<!DOCTYPE routes PUBLIC "-//Liferay//DTD Friendly URL Routes 6.0.0//EN" "http://www.liferay.com/dtd/liferay-friendly-url-routes_6_0_0.dtd">
<routes>
 <route>
 <pattern></pattern>
 <implicit-parameter name="p_p_id">cmsarticlerssfeed_WAR_Cms_Eipportlet</implicit-parameter>
 <implicit-parameter name="p_p_lifecycle">2</implicit-parameter>
 <implicit-parameter name="p_p_state">normal</implicit-parameter>
 <implicit-parameter name="p_p_mode">view</implicit-parameter>
 <implicit-parameter name="p_p_resource_id">rss</implicit-parameter>
 </route>
 <route>
 <pattern>/{columnId}</pattern>
 <implicit-parameter name="p_p_id">cmsarticlerssfeed_WAR_Cms_Eipportlet</implicit-parameter>
 <implicit-parameter name="p_p_lifecycle">2</implicit-parameter>
 <implicit-parameter name="p_p_state">normal</implicit-parameter>
 <implicit-parameter name="p_p_mode">view</implicit-parameter>
 <implicit-parameter name="p_p_resource_id">rss</implicit-parameter>
 </route>
</routes>

pattern:为主路径,是类似restfull的格式形式,为空的则表示是http://xxx/web/hqw/rss/-/rss/此路径。

implicit-parameter:这个里面的信息是一些固定的参数信息可以看作为静态参数,表示请求此路径的时候在后台默认附带的参数。

/{columnId}:这个表示的动态参数,也就是需要根据此参数的不同的来到后台根据此参数来显示不同的内容。columnId表示这个参数的名称为columnId。当在浏览器请求的URL为:http://xxx/web/hqw/rss/-/rss/123这样的形式的时候,则表示请求的内容为columnId=123。

 
示例Demo下载:点击此处
用户头像

2 条留言  访客:1 条  博主:1 条

  1. avatar 斯巴达克思

    想问一下,我想把这个易用URL改成其他网站的,例如百度
    该如何设置呢?

    • avatar 胡启稳

      你应该是想点击这个页面的时候跳转到百度?设置页面类型为URL,在那里面输入网址即可

给我留言

Copyright © IT人生录 保留所有权利.   主题设计 知更鸟 滇ICP备16001547号-1

用户登录

分享到: