2009-04-24 87 views
2

我正在编写我的第一个基于portlet的应用程序(对于liferay,但解决方案应该是容器不可知的),我想知道人们如何解决以向用户提供“领导”到不同的portlet(可能在门户中的不同“页面”上)。门户/ portlet编程 - portlet链接/页面流

虽然在portlet中可以轻松地使用不同的视图模式,但是如何链接到另一个portlet并(也许)也可以传递参数?

我不是在讨论portlet之间的简单通信,而是真正感兴趣的页面流。

示例: 您的页面A带有一个显示新闻项目列表的portlet。然后你有页面B,这是在配置的方式我希望单个新闻项目被显示(例如,不同的portlet)

有没有一个通用的解决方案,链接到页面B,并说新闻-Detail-Portlet它应该显示项目XYZ?

的快速和肮脏的解决办法是配置通过新闻一览Portlet的编辑模式的目标链接。但是,这有几个缺点: - 复杂的portlet可能导致门户管理员 大量配置工作的几个目标URL - URL中可以不遵循方案,它允许简单的参数注入

我心里有一个解决方案,但是这需要大量的努力,并且可能会改变目标portlet,如果您使用第三方portlet,这并不总是可行的。

我的解决办法是这样的:(草案!)

的Portlet在与他们的portlet ID的中央服务注册,当一个portlet要链接到一个portlet可以做基于一个象征性的名称进行查找。这将缓解管理员的痛苦,因为可以“自动发现”portlet。该服务还可以提供基于源和目标Portlet连接Portlet的UI。

可以更改的portlet的URL生成可以通过服务调用来解决,该portlet通过注入参数生成整个URL并将其返回。 对于您无法更改的portlet,您必须追加参数并希望它能正常工作。 : -/

有什么建议?有更简单的解决方案吗?现有解决方案

谢谢!

Patrick

回答

1

据我所知Portlet规范不涵盖这一点。所以没有便携式解决方案。对于Liferay,您始终可以使用他们的定制标签库,它正是针对这个问题。 Websphere Portal有类似的机制。

东西可以发现herehere

一般来说,我会尽力避免这一点,并使用标准的IPC机制(公共呈现参数或事件)

0

对于JSR 286规范,可以使用事件进行Portlet间的通信。对于较老的JSR 168,没有认可的方式。如果您找到适合您的方式,请使用它。

有一本旧书免费送出Manning(需要注册)。你可以在那里找到一些想法。

+0

正如我写的沟通是没有问题的,我可以有切换到另一个主要问题的页面。 – 2009-04-24 10:55:55

+0

我没有机会在目标portlet不是由我写的时候使用事件 – 2009-04-24 11:01:19