说明:以下内容和官方文档相差不大,如果您英文较好,建议直接去读官方文档,地址是:https://dev.liferay.com/develop/tutorials/-/knowledge_base/6-1/adding-friendly-url-mapping-to-the-portlet。如果没有操作成功,再回来看一看,相信您会有所收获。

  如果我们要在liferay中跳转到一个jsp界面。我们可能会这样写

<portlet:renderURL var="editGreetingURL">
<portlet:param name="mvcPath" value="XXX" />
</portlet:renderURL>
<a href="<%= editGreetingURL %>">跳转到jsp界面</a>

  其中XXX表示我们要跳转的jsp界面的全路径,比如:/html/portlet3/view.jsp。

  这个时候它的url路径是类似于这样的:

http://localhost:8080/zh/web/guest/what-we-do?p_p_id=portlet3_WAR_testPortletportlet&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_pos=1&p_p_col_count=4&_portlet3_WAR_testPortletportlet_mvcPath=%2Fhtml%2Fportlet3%2Fedit.jsp

  这样的路径又臭又长,而且也看不懂什么意思,那么能不能把它变得好看一点呢?肯定是能的,可以把它变成类似于下面的形式:

  http://localhost:8080/zh/web/guest/what-we-do/-/portlet3/view

接下来我们一起来把它改造一下:

  1. 新建一个Portlet,名称为Portlet3

  2. 在liferay-portlet.xml文件中找到Portlet3对应的代码,在  </icon>标签后面并且在<instanceable>标签前面加上以下内容:

<friendly-url-mapper-class>com.liferay.portal.kernel.portlet.DefaultFriendlyURLMapper</friendly-url-mapper-class>
<friendly-url-mapping>portlet3</friendly-url-mapping>
<friendly-url-routes>com/liferay/samples/portlet3-url-routes.xml</friendly-url-routes>

  3. 新建文件portlet3-url-routes.xml,全路径为:  /WEB-INF/src/com/liferay/samples/portlet3-url-routes.xml ,文件内容如下。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE routes PUBLIC "-//Liferay//DTD Friendly URL Routes 6.1.0//EN"
"http://www.liferay.com/dtd/liferay-friendly-url-routes_6_1_0.dtd"> <routes>
<route>
<pattern>/{mvcPathName}</pattern>
<generated-parameter name="mvcPath">/html/portlet3/{mvcPathName}.jsp</generated-parameter>
</route>
</routes>

    注意:

        1)文件的全路径要和第二步中<friendly-url-routes>标签的内容对应。

        2)把<generated-parameter>标签的内容替换成您要跳转的jsp页面的全路径。以“/”开头,代表当前项目。

  4. 重新部署您的portlet,刷新页面,并再次尝试如下的链接是。

http://localhost:8080/zh/web/guest/what-we-do/-/portlet3/view

http://localhost:8080/zh/web/guest/what-we-do/-/portlet3/edit

     效果如下

         

解析:

  1. http://localhost:8080/zh/web/guest/what-we-do/-/portlet3/view 中的what-we-do要和当前页面对应(空格可以使用-来代替)。portlet3和liferay-portlet.xml中的<friendly-url-mapping>里面的内容对应。Edit要和jsp文件名称对应。
  2. portlet3-url-routes.xml中类似于RESTFUL风格。
  3. liferay对于 http://localhost:8080/zh/web/guest/what-we-do/-/portlet3/view 路径的寻找过程如下:
      先是what-we-do找到页面,然后寻找liferay-portlet.xml文件中<friendly-url-mapping>是portlet3的元素,找出对应的<friendly-url-routes>标签的内容:com/liferay/samples/portlet3-url-routes.xml,然后寻找对应的xml文件,在把xml文件中的{ mvcPathName }替换成view,然后去寻找/html/portlet3/view.jsp。找到具体的jsp文件。

Liferay6.1 配置友好的URL映射的更多相关文章

  1. 2-字符串模拟- URL映射

    问题描述 试题编号: 201803-3 试题名称: URL映射 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 URL 映射是诸如 Django.Ruby on Rails 等 ...

  2. CCF 201803-3 URL映射

    CCF 201803-3  URL映射 试题编号: 201803-3 试题名称: URL映射 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 URL 映射是诸如 Django. ...

  3. 201803-3 URL映射

    问题描述 URL 映射是诸如 Django.Ruby on Rails 等网页框架 (web frameworks) 的一个重要组件.对于从浏览器发来的 HTTP 请求,URL 映射模块会解析请求中的 ...

  4. url映射 ccf (Java正则表达式80分解法)

    问题描述 试题编号: 201803-3 试题名称: URL映射 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 URL 映射是诸如 Django.Ruby on Rails 等 ...

  5. 应用springMVC时如果配置URL映射时如下配置

    应用springMVC时如果配置URL映射时如下配置 [html] view plaincopy<servlet> <servlet-name>appServlet</s ...

  6. Django - 将URL映射到视图

    URLconf 就像是 Django 所支撑网站的目录.它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表.你就是以这种方式告诉 Django,对于这个 URL 调用这段代码, ...

  7. ASP.NET MVC 5 Web编程2 -- URL映射(路由原理)

    本章将讲述ASP.NET MVC5 的路由原理,即URL映射机制. 简单点就是解释:为什么MVC在浏览器输入地址就能访问到类(或类中的方法)?这是怎么做到的?我自己可以通过.NET写出一个自己的MVC ...

  8. urlMappings与URL映射

    此配置节的作用就是往Web程序中添加URL的映射,从而达到用户访问映射后的URL(如/Page/AAA)也能访问到源URL(如/Page/PageAAA.aspx)的效果.这也是URL映射本来的作用. ...

  9. django中“url映射规则”和“服务端响应顺序”

    1.django搜索路径 使用 import 语句时,Python 所查找的系统目录清单.      查看方式:         import sys        print sys.path   ...

随机推荐

  1. Android显示gif格式图片

    大家知道,在Android中使用ImageView来显示gif格式的图片,我们无法得到gif格式图片该有的效果,它只会停在第一帧上,而不会继续.这时只能看到一张静态的图片,这里我们可以使用个简单的方法 ...

  2. IEditableObject的一个通用实现

    原文:IEditableObject的一个通用实现 IeditableObject是一个通用接口,用于支持对象编辑.当我们在界面上选择一个条目,然后对其进行编辑的时候,接下来会有两种操作,一个是保持编 ...

  3. Leetcode 104 Maximum Depth of Binary Tree 二叉树

    计算二叉树的最大深度 我的方法是找出两个子树的长度中最长的那个,然后加1 class Solution { public: int maxDepth(TreeNode* root) { ; ,maxD ...

  4. #747 –在WPF程序的触摸操作中使用惯性移动 (Implementing Inertia during Touch Manipulation)

    原文:#747 –在WPF程序的触摸操作中使用惯性移动 (Implementing Inertia during Touch Manipulation) 原文地址:https://wpf.2000th ...

  5. 如何诊断rac环境sysdate 返回的时间错误

    最近处理了若干rac环境访问sysdate错误的时间返回.而这个问题通常是一个数据库链接是由现在Listener创建的情况下.并且.大部分情况下都是和时区设置相关的.在这篇文章中我们会针对怎样诊断这样 ...

  6. ubuntu进不去桌面

    今天折腾ubunu的时候,总是进不去桌面,开机直接进入啦终端模式.在google帮助终于解决. sudo apt install --reinstall gnome-shell ubuntu-desk ...

  7. .NET Core 中使用 Humanizer 显示友好时间格式

    今天在将一个 .net framework 项目迁移至 .net core 的过程中,在迁移到显示友好时间格式(比如“1分钟前”,“1小时前”)的代码时,找了找看有没有对应的开源库,结果找到了 Hum ...

  8. .NET 图片像素比较

    /// <summary> /// 图像比较.用于找出两副图片之间的差异位置 /// </summary> public class ImageComparer { /// & ...

  9. iOS 自定义UIButton

    工作中有一个点击button更新button上文案的需求,用自定义了button可以很简单的实现的这个需求 首先写个自定义的button CustomButton.h #import <UIKi ...

  10. OPENGL---Ps 径向模糊算法(glsl)

    原文:OPENGL---Ps 径向模糊算法(glsl) 本文转载自:  http://blog.csdn.net/zx6733090/article/details/40311689 功能本人之前也介 ...