在一个Portlet中链接到另一个Portlet
这个问题,应该是大部分网站开发人员都希望能解决的问题。典型应用情况:两栏布局,左边是一些链接,右边有一个内容呈现框。当用户点击左边的链接的时候,希望在右边的内容框中显示内容。
在Portal中,一般我们都会把左右做成不同的Portlet。而Portal似乎没有提供直接的方法,能够链接到其他Portlet,通常都是在当前Portlet进行显示。
6.1 Portal的URL格式分析
在一个Portal页面中,Url的格式如何,它是如何将参数传给某一个Portlet的。了解了这些,对解决这个问题应该有所帮助。
这是一个BBS的Url的例子。
http://localhost:8080/c/portal/layout?p_l_id=PRI.15.2&p_p_id=19&p_p_action=0&p_p_state=maximized&p_p_mode=view&p_p_col_id=column-2&p_p_col_pos=0&p_p_col_count=1&_19_struts_action=%2Fmessage_boards%2Fview&_19_categoryId=1
从这个URL分析来看,主要有以下几个参数
p_p_id=19 这个主要是描述当前是在操作哪个Portlet
_19_struts_action=%2Fmessage_boards%2Fview
_19_categoryId=1 这两个是需要传递给Portlet的参数。
如果我们能修改这几个参数,比如,将19换成其他Portlet,应该就可以实现链接到另一个Portlet。
一种做法,是将renderResponse. createRenderURL().toString()进行替换,将其中的portletName换成目标Portlet的portletName。方法应该是可行的,但有点麻烦。尝试找找有没有更好的方法。
6.2 源代码分析
还是从源代码入手,看看Liferay自己是如何处理的。
renderResponse的实现类是com.liferay.portlet.RenderResponseImpl。
public PortletURL createRenderURL() {
return createRenderURL(_portletName);
}
public PortletURL createRenderURL(String portletName) {
…
return portletURL;
}
有希望,我们直接调用createRenderURL(String portletName),将Portlet的名字作为参数传入,应该就可以实现这个目的了。
但是RenderResponse接口并没有createRenderURL(String portletName)这个方法,只能做一下强制转换
PortletURL rowUrl =((com.liferay.portlet.RenderResponseImpl)renderResponse).
createRenderURL(portletName);
rowUrl.setParameter("categoryId", String.valueOf(19));
编写了一点测试代码,对此进行了测试。呵呵,搞定。
6.3 几个实现细节
Portlet有两种类型,是否可实例化。前述的例子,是不可实例化的Portlet,因此只需要使用其Portlet名字19即可。那对于可以实例化的Portlet呢?经过测试发现,需要把其实例化后的名字作为参数传入。
比如一个可实例化的Portlet的名字是56_INSTANCE_95uY。表示其Portlet的名字为56,实例化之后的名字是56_INSTANCE_95uY。把这个名字作为参数传入,即可达到目的。
另一个问题,我们如何将portletName传递给Portlet,让它根据这个参数生成URL?一种做法就是编写Portlet的PortletPreference,在里面保存这个参数名。这样,在不同的页面,我们都可以很方便的实现我们需要的功能。
分享到:
相关推荐
3. **主题与布局**:Liferay的主题决定了门户的外观,而布局决定了页面元素的排布。如何自定义主题和布局,以及使用FreeMarker或JSP模板语言进行界面设计。 4. **权限与角色管理**:Liferay的权限系统是其一大特色...
- **Liferay SDK:**Liferay提供了SDK,包含了一系列工具和模板,帮助开发者快速构建和部署Portlets。 - **编写简单JSPPortlet:**通过学习如何编写JSPPortlet,开发者能够理解Liferay Portlet的基本结构和工作原理...
《Liferay开发文档集合》是针对企业级门户平台Liferay的一系列技术指南,涵盖了从基础安装到高级定制的全方位知识。这些PDF文档旨在帮助开发者、系统管理员和IT专业人员更好地理解和利用Liferay Portal来构建和管理...
【Liferay 学习笔记】 Liferay 是一款开源的企业级门户平台,用于构建和管理复杂的Web应用程序。在本文中,我们将深入探讨如何在Liferay中进行一些基本操作和配置,如修改公司LOGO、增加用户、创建页面以及理解...
Liferay提供了一系列社交协作工具,如论坛、博客、聊天、日历和任务管理。这些工具促进了团队间的沟通和协作,增强了用户体验。 9. **扩展与集成**: Liferay通过插件和API支持与其他系统的集成,如SAP、...
本资源集是针对Liferay Portal开发的一系列中文文档,旨在帮助开发者全面了解和掌握Liferay的相关技术。 1. **Liferay Portal 架构** Liferay Portal的核心架构基于Java EE标准,包括Servlet容器、EJB、JMS和JPA等...
【Liferay 系列文章 7章 从介绍 到入门】 Liferay 是一款开源的企业级门户平台,本文将...通过学习这一系列文章,读者不仅可以理解Portal技术的重要性,还能具备实际操作Liferay的能力,以应对现代企业信息化的需求。
Liferay 6.1 是在2011年发布的版本,引入了一系列重要的新特性,如文件同步功能,增强了文档库的管理,优化了用户界面,提供了表单和工作流设计器,以及对移动设备的更好支持。这一版本的发布进一步提升了Liferay的...
开发者可以通过分析和运行这个示例,学习如何在Liferay平台上构建动态、自定义化的应用程序。 【标签】:“liferay portlet demo” “liferay”标签明确了这是关于Liferay Portal的内容,“portlet”表示与Portlet...
### Liferay Portal 开发指南知识点概述 ...通过学习本文档,开发者不仅可以掌握 Portlet 的开发技巧,还能深入了解 Liferay Portal 的架构和技术特点,从而更好地利用该平台来满足企业的业务需求。
为了在Eclipse环境中高效地开发和调试Liferay应用,我们需要进行一系列的配置步骤。以下将详细介绍如何在Eclipse中设置Liferay的开发和Debug环境。 1. **安装必要的软件和插件** - 首先,确保你已经安装了最新版本...
### Liferay in Action – 关键知识点解析 #### 一、概览 《Liferay in Action》是一本关于Liferay Portal开发的官方...通过学习本书,您可以掌握如何利用Liferay构建复杂的企业级应用,提高工作效率并降低维护成本。
通过详细阅读这个文档,开发者可以学习如何有效地利用Liferay API进行开发,提高工作效率,同时确保与Liferay 6.0.5版本的兼容性。 总之,Liferay 6.0.5 API 是开发者深入挖掘Liferay潜力、定制化企业级解决方案的...
此外,Liferay 提供了一系列的命令行工具,如Liferay CLI,用于自动化部署和管理任务。 在实际操作中,Liferay 的安装和配置可能会涉及到多个层面,包括数据库连接、服务器设置、安全策略等。手册通常会详细解释...
1. **安装脚本**:通常在安装或更新Liferay Portal时,会有一系列的SQL脚本用于创建必要的数据库结构,包括表、视图、存储过程等。 2. **升级脚本**:随着Liferay版本的升级,这些脚本可能用于将现有数据库从一个...
Liferay 6.2 是一个流行的开源企业级门户平台,它提供了一系列强大的功能,包括内容管理、社交协作、用户管理等。在这个“liferay6.2 CRUD FriendlyURL Search-Container”示例中,我们将深入探讨如何在Liferay 6.2...
Liferay提供了一系列的社交协作功能,如社交网络、社区论坛、即时通讯、日程管理、任务分配等,帮助企业构建内部社交环境,提升团队协作效率。 8. **内容管理和文档库** Liferay的内容管理系统支持文档的上传、...
1. **主题结构**:Liferay主题通常包含一系列配置文件和模板文件。在提供的文件名列表中,我们看到了如`build.properties`、`build-common-plugin.xml`等,这些都是构建主题过程中的配置文件。`themes`目录则可能...