`
sumongh
  • 浏览: 227287 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

在一个Portlet中链接到另一个Portlet

阅读更多

在一个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,在里面保存这个参数名。这样,在不同的页面,我们都可以很方便的实现我们需要的功能。 


分享到:
评论

相关推荐

    Portlet 2规范

    - **数据共享**:例如,用户在一个Portlet中输入的信息可以被其他Portlet获取和利用。 - **协同工作**:多个用户可以在不同的Portlet中协同编辑同一份文档。 ##### 2. 寿命周期管理 Portlet 2.0规范提供了更强大...

    jetspeed 的几个portlet

    jetspeed提供了一个友好的平台,使得开发者能够快速地创建和部署portlet,实现与其他系统的无缝连接。通过分析和研究这些示例文件,你可以深入理解portlet的工作原理,提高你的企业级应用开发能力。

    IBM portlet

    在这里,你可以创建一个新的数据源,数据源是WebSphere中管理和使用JDBC连接的实体。 5. 对于新建的数据源,填写服务器名称,例如使用计算机名`server_1`代替IP地址`192.168.1.27`。此外,对于容器管理的认证别名,...

    portlet factory 访存数据源名称 配置说明

    数据源本质上是一个连接池,它管理着到数据库的连接,提高了系统性能并降低了资源消耗。 在Portlet Factory中配置数据源分为两大部分:在WebSphere Application Server(WAS)控制台上配置数据源,以及在设计器中...

    IBM WebSphere Portlet Factory

    1. **可视化开发环境**:提供了一个直观的拖拽式用户界面,使开发者能够轻松创建、编辑和调试 Portlet。 2. **模板化设计**:支持使用预定义模板快速搭建 Portlet 框架,简化了开发过程。 3. **集成测试与调试工具**...

    Portlet+开发.pdf

    Portlet 的核心在于其可重用性和模块化特性,这使得开发者能够轻松地将不同的功能模块集成到一个统一的门户平台中。 - **Portal**:门户(Portal)是 Web 页面的一种形式,它将来自不同来源的信息和服务整合在一起,...

    JetSpeed 高级portlet技术

    一个典型的门户网站页面可能包含多个portlet,每个portlet负责展示不同类型的信息。例如,“Home”页面可能包含了“Reports”、“Weather”和“Contacts”三个portlet,分别展示了报告信息、天气预报和联系人列表。 ...

    liferay-portlet-development

    从创建项目、编写代码、部署测试,到最后的代码优化,详细讲解每一个步骤,让读者掌握Liferay Portlet开发的核心技巧。 ### 结语 《Liferay Portlet 开发——全面指南》不仅是一份学习资料,更是一部实战手册。...

    remote_portlet经典例子(WSRP ,IBM Websphere Portal Server v6.0)

    - 示例代码通常涉及如何注册一个portlet到Consumer端,以及如何处理portlet的渲染请求等关键步骤。 4. **安全性和性能优化**: - **安全性**:通过HTTPS等安全协议确保数据传输的安全;利用WS-Security等标准来...

    sample-dao-portlet-4.0.0.zip_portal java

    标题中的"sample-dao-portlet-4.0.0.zip_portal java"暗示了这是一个关于Liferay Portal的Java项目,特别涉及到DAO(数据访问对象)组件。这个项目可能包含了一个示例Portlet,用于演示如何使用JDBC插件来与数据库...

    IBM.Press.Rapid.Portlet.Developme.with.WebSphere.Portlet.Factory.Sep.2008.pdf

    - **集成框架**:提供了一个统一的框架来连接不同的应用程序和服务。 - **业务规则管理**:允许动态管理业务逻辑和规则,而无需修改底层代码。 ### 四、IBM Press资源 IBM Press 提供了一系列资源和支持材料,包括...

    jsr168 portlet(struts2+spring2.5+hibernate3.3)(转载)

    【标题】"jsr168 portlet"是基于Java标准JSR168实现的...通过这些组件的整合,开发者可以创建一个可扩展且易于维护的portlet应用,该应用可以无缝地融入portlet容器,并与其他portlet协同工作,提供丰富的Web功能。

    portlet:jQUeryUI Portlet和PHP后端

    在这个项目"portlet:jQUeryUI Portlet和PHP后端"中,我们将深入探讨如何结合jQuery UI库来创建一个portlet,并通过PHP作为后端与MySQL数据库进行交互。 首先,jQuery UI是一个基于jQuery JavaScript库的集成了多种...

    jsr168 portlet(struts2+spring2.5+hibernate3.3)

    【标题】"jsr168portlet(struts2+spring2.5+hibernate3.3)" 是一个基于Java的Web开发项目,它利用了JSR 168规范来实现portlet的功能,并结合了Struts2、Spring2.5和Hibernate3.3这三个框架的强大功能。JSR 168是Java...

    vs-system-portlet

    "vs-system-portlet"就是这样一个portlet,它的目的是在用户界面中提供关于系统状态的实时信息,特别是关于集群环境中的节点信息。 集群是一种高可用性和负载均衡的解决方案,它通过将多个服务器节点连接在一起,...

    appconnector-portlet-local:appconnector-portlet-local

    "appconnector-portlet-local"是一个基于Java技术的portlet应用,主要功能是实现应用程序的连接和集成。Portlet是一种Web组件,常用于企业级内容管理系统(CMS)或企业门户,允许用户在页面上嵌入和交互不同的功能...

    jenkins-integration-portlet

    Jenkins 集成 Portlet动机开发团队越来越多地采用持续集成作为开发流程中...:配置'docroot/WEB-INF/src' 下有一个名为portlet.properties的属性文件。 该文件包含一些具有空值的属性,用于连接到您的 Jenkins 服务器,

    Portlets in Action

    - **门户功能实现**:具体指导读者如何实现用户认证、个性化设置等功能,以及如何将多个Portlet集成到一个门户中。 #### 章节六:Portlet标签库 - **标签库介绍**:介绍Portlet标签库的组成和使用方法,帮助开发者...

Global site tag (gtag.js) - Google Analytics