Xpages从父网页获取iFrame内的getComponent

Xpages从父网页获取iFrame内的getComponent,iframe,xpages,lotus-domino,tabcontainer,Iframe,Xpages,Lotus Domino,Tabcontainer,我们已经构建了一个Xpage应用程序,其中包含一个选项卡式容器。 选项卡容器的第一页包含一个视图,当单击该视图中的文档时,一个包含相应文档的新选项卡将添加到选项卡容器中。这个新的选项卡页面包含一个带有scr属性的面板,待显示页面的url被赋予该面板的src属性。结果是我们有一个带有iframe的tabpage,iframe保存我们的文档页面 问题: 在这个iframe中,我们需要从父网页获取一个组件(SSJS或Java)。在这种情况下,getComponent函数不起作用,因为它只会在当前组件树

我们已经构建了一个Xpage应用程序,其中包含一个选项卡式容器。 选项卡容器的第一页包含一个视图,当单击该视图中的文档时,一个包含相应文档的新选项卡将添加到选项卡容器中。这个新的选项卡页面包含一个带有scr属性的面板,待显示页面的url被赋予该面板的src属性。结果是我们有一个带有iframe的tabpage,iframe保存我们的文档页面

问题:

在这个iframe中,我们需要从父网页获取一个组件(SSJS或Java)。在这种情况下,getComponent函数不起作用,因为它只会在当前组件树(iFrame的,而不是父页面)中进行搜索

我正在寻找一种从父页面获取组件的方法

关于如何实现这一点有什么想法吗

谢谢:-)创建一个托管bean

    package mypackage;

    import javax.faces.component.UIComponent;

    public class MyComponentBean {

        private  UIComponent component;

        public void setComponent(UIComponent component) {
            this.component = component;
        }

        public UIComponent getComponent() {
            return component;
        }

    }
2) 将托管bean添加到
sessionScope

<?xml version="1.0" encoding="UTF-8"?>
<faces-config>

  <managed-bean>
    <managed-bean-scope>session</managed-bean-scope>
    <managed-bean-name>componentBean</managed-bean-name>
    <managed-bean-class>mypackage.MyComponentBean</managed-bean-class>
  </managed-bean>

</faces-config>

一场
组件bean
mypackage.MyComponentBean
3) 将bean作为绑定添加到第1页的组件

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

    <xp:inputText
        id="inputText1"
        binding="#{componentBean.component}">
    </xp:inputText>

    <xp:br />

    <xp:button
        value="Label"
        id="button1">
        <xp:eventHandler
            event="onclick"
            submit="true"
            refreshMode="partial" refreshId="inputText1">
        </xp:eventHandler>
    </xp:button>

</xp:view>

4) 访问第2页上的组件(在本例中为组件的值)


谢谢你们的建议! 我采用了以下方法,通过使用view.postScript命令,我能够在主页上触发一个按钮,该按钮启动我的对话框:-) view.postScript("parent.document.getElementById('view:_id1:_id2:btnDisplayDialog').click();"); view.postScript(“parent.document.getElementById('view:_id1:_id2:btnDisplayDialog')。单击();”;

您不需要来自另一页的组件。您需要一个托管bean来存储您想要访问的值。如果您只需要传递一个文本,也许可以将其作为url参数传递到iframe。这个对话框位于一个自定义控件内,该控件包含应用程序布局和其他一些常见内容。我认为您将它复杂化了。为什么不使用dialog作为自定义控件并在文档页面中使用它呢?是的,这当然是一个干净的解决方案,但这样做的兴趣主要在于我们在这些选项卡中显示许多不同的XPage。因此,这需要我们将此自定义控件添加到所有控件中。这个想法还在于人们可以在主页上打开许多非常复杂的文档,因此最终任何和所有可以共享的组件都可以提高应用程序的整体性能……我需要得到的组件是对话框。当我在java调试器中循环代码时,我看到我确实获得了dialogbox组件的句柄。当代码调用dialog.show()时,什么都没有发生,页面会一直“等待服务器…”我不明白您要实现什么。但是有人告诉我,你怎么做是根本错误的。我想这是一个更普遍的问题,看看能实现什么,这种将组件绑定到托管bean的方法非常有趣,在未来会很有用。对于dojo对话框控件,我想这种方法是错误的。我将把组件添加到这些页面中,并结束;-) view.postScript("parent.document.getElementById('view:_id1:_id2:btnDisplayDialog').click();");