0

我有一个关于我们现在遇到的问题的问题。只要我搜索互联网,我还没有找到任何有用的信息。

所以这就是问题所在。

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

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

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

我想知道你们是否知道更好的解决方案,想法或建议可以给我解决这个问题。

谢谢。

编辑:

到目前为止,我发现使用 javascript:AjaxGet 的 GateIn 扩展和 Richfaces 确实会破坏功能。当我使用 ajax 调用时,例如以下链接:

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

请允许我使用其他 portlet 使用。aka 其他 portlet 再次变得可用。同样在 Richfaces.panelTabs 对象中,填充了剩余的 portlet 信息,以便我们可以访问这些 portlet。ajaxget 和 Richfaces 会不会有我还不知道的问题?

谢谢阿甘。

4

1 回答 1

0

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

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

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

为此,我们必须在 GateIn 自己的代码中做一些变通方法和一些改进。您可以检查是否要在 xml 文件中使用 () 部分及其用途。当您从导航部分或菜单打开该 portlet 时,此标记允许加载“portlet”。

但是正如它所提到的,这个标签不允许加载另一个portlet。它只是删除旧的并放入新的。因此,如果当时我想查看两个以上的 portlet,或者如果我想将参数传递给该 portlet 并查看更改,甚至不关闭前一个是不可能的。

有两种解决方案,

1- 在 GateIn 的代码中你可以创建多个页面(或者可以在 xmls 中配置),这个页面可以有多个标签,但你需要知道只有一个页面主体将起作用,如果页面包含另一个page-body 标签,我们必须禁用其他页面正文标签。

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

示例:假设我们有 2 个父 portlet -User -Domain

假设我们有 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 的代码中启用用户 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 portlet 定义附带的 groovy 模板一起使用。 .gtmpl模板文件。此文件可以访问其创建者。我的意思是,一些容器已经可以通过这些 .gtmpl 模板文件访问。

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

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

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

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

这些是我们迄今为止找到的解决方案。

就我们实施的情况而言,它们都运行良好。

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

谢谢

于 2017-04-26T07:19:19.673 回答