【问题标题】: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 anotherGatein 3.4.0 最终 Jboss 5.1.0 portlet 状态和 JSR186 交互,从一个 portlet 到另一个 portlet 时无法显示多个 portlet
【发布时间】:2017-04-05 09:12:33
【问题描述】:

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

所以问题来了。

在我们的系统中,我们大量使用 portlet,其中有 100 个,有 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 会不会有我还不知道的问题?

谢谢阿甘。

【问题讨论】:

    标签: jboss richfaces ipc gatein


    【解决方案1】:

    对于那些使用 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 -用户 -域名

    假设我们还有 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 中执行操作以打开带有“传递数据”的子 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的代码无关,否则你不必触摸那个区域。

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

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

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

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

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

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

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

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

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      相关资源
      最近更新 更多