Gatein 3.4.0 final Jboss 5.1.0 portlets 状态和 JSR186 交互,从一个 portlet 到另一个 portlet 时无法显示多个 portlet

Gatein 3.4.0 final Jboss 5.1.0 portlets states and JSR186 interaction, Not able to show multiple portlets when going from one portlet to another

我对我们现在遇到的问题有疑问。我在网上搜索了很久都没有找到有用的信息。

那么问题来了

在我们的系统中,我们大量使用 portlet,其中有 10 个或 100 个。在某些情况下,我们希望一起显示不同的 portlet,因为某些 portlet 需要 IPC(内部 portlet 通信以将参数传递给其他 portlet),以便用户可以轻松转到下一个 portlet,而无需重新编写所需的参数并自动调用 web 服务来获取information/do 它的工作等...

在迁移到 gatein-3.4 final 时,Jboss 5.1.0 打破了这种旧风格。目前 gatein (eXo gatein) 确实允许我们有一个页面,其中包括所有可见的 portlet,但我想要的是让它们不可见(也就是最小化或最大化状态)最大化状态意味着可见,否则不可见。在 JSR186 中,我们有 window 状态、window 对象和 portlet 上下文,它们允许我们拥有每个 portlet NODE,以及所有其他节点(节点是一个 portlet,来自 PortletNode.class in portal- api-lib jar(我们现在没有))

所以我们不再有这种结构,我们一次只能显示一个 portlet。

不知各位有没有更好的解决办法、想法或建议,可以给我解决这个问题。

谢谢。

编辑:

到目前为止,我发现使用 javascript:AjaxGet 的 GateIn 扩展和 Richfaces 确实破坏了功能。当我使用 ajax 调用时 link:

 javascript:ajaxGet('/ProvPortal/classic/UserPortlet?portal:componentId=99b3433a-585c-471e-928b-d8e4b17fcf02&objectId=minimized&portal:action=ChangeWindowState&ajaxRequest=true')

请允许我使用其他 portlets 使用。也就是其他 portlet 再次发挥作用。同样在 Richfaces.panelTabs 对象中填充了剩余的 portlet 信息,以便我们可以访问 portlet。我还不知道 ajaxget 和 Richfaces 有问题吗?

再次感谢。

致那些使用 Jboss 5.1.0 版和 GateIn 3.4 GA 版的人。

让我解释一下 portlet 开发的一些亮点。首先,portlet 是一个独立的应用程序,或者更确切地说,我们可以说是 wiki 中提到的 Web 组件。可以用 jsp/jsf 构建,可以打包为 war.

但是 GateIn 允许我们一次在页面上显示一个 portlet,但不能显示两个或更多,或者我们不知道该怎么做?

要实现这一点,我们必须对 GateIn 自己的代码进行一些变通和改进。您可以检查 xml 文件中是否需要 () 部分及其使用。当您从导航部分或菜单打开该 portlet 时,此标记允许 'portlet' 加载。

但是,如其所述,此标记不允许加载另一个 portlet。它只是删除旧的并放置新的。因此,如果当时我想查看两个以上的 portlet,或者如果我想将一个参数传递给该 portlet 并在不关闭前一个 portlet 的情况下查看更改,那是不可能的。

有两种解决方法,

1-在GateIn的代码中可以创建多个页面(也可以在xmls中配置),这个页面可以有多个标签,但是要知道只有一个page-body将是功能性的,如果页面包含另一个 page-body 标签,我们必须禁用其他页面 body 标签。

页面正文标签可从 GateIn 的代码列表中访问,因此在此列表中,如果您要在父 portlet 下打开另一个 portlet,这意味着您必须启用该父 portlet 页面正文标签。每当您导航到另一个被视为父 portlet 的 portlet 时,先前的 portlet 将从上下文中删除,并且这个新的父 portlet 将使用默认页面主体标记加载到上下文中。

示例:假设我们有 2 个父 portlet -用户 -域

假设我们有 2 个其他 portlet 需要作为页面中的第二个 portlet 打开,而不关闭用户或域 portlet。

-a page contains page body{
    user portlet with disabled page body tag{

       open sub-portlet-a with data X, (a button or a link)
       open sub-portlet-b with data Y  (a button or a link)

    }
}

每当您在用户 portlet 中使用 "PASSED DATA" 打开子 portlet 到第二个子 portlet 时,我们都会在第二个 portlet 的 gatein 代码中启用用户 portlet page-body 标签, "PASSED-DATA",将被打开。

Switch to Domain portlet-> user portlet will be gone,同样的步骤也将应用于域 portlet。考虑到这仅适用于在 xml 文件中使用相同子 portlet 设置域和用户 portlet 的情况。

<!--portlet definitions-->
    <user>
     <!--some user specific information goes here-->
     <a></a> (optional)
     <b></b> (optional)
    </user>


<domain>
 <!--some Domain specific information goes here-->
 <a></a> (optional)
 <b></b> (optional)
</domain>

正如我们所提到的,有两种方法可以在页面中打开第二个 portlet。

这是第二个。

2-这个问题的第二个解决方案与gatein的代码无关,或者你不必触及那个区域。

它与 GateIn portlet 定义附带的 groovy 模板一起使用。 .gtmpl 个模板文件。该文件可以访问其创建者。我的意思是一些容器已经可以通过这些 .gtmpl 模板文件访问。

例如,您可以使用此模板文件中的 UITableColumnContainer.gtmpl 文件和 UIContainer 对象。该对象将根据您的 portlet 为您提供上下文。这意味着您可以在此文件中获取其他 portlet。

所以从现在开始我认为我们可以在 groovy 模板文件中获取其他 portlet。

在这种情况下,如果我想在单击按钮后打开一个 portlet 或执行操作以在我的 Portal 结构中打开第二个 portlet,我可以呈现它。

其他 portlet 呈现为默认值(设置为 false) 从现在开始,我们可以从 URL 或一些获取有关我们要打开的 portlet 的信息其他类型的您自己的实现,然后 我们可以将该 Portlet 设置为呈现为 True

这些是我们目前找到的解决方案。

就我们实施的情况而言,它们都工作正常。

如果这会以某种方式帮助你或者更确切地说是有用的,那意味着我们已经取得了一些进展。

谢谢