“文档数据源”属性更改嵌套的“自定义控件”中的类型/类

时间:2014-11-06 13:49:10

标签: javascript data-binding xpages

这是我们内部日志的一部分,在这两种情况下,我在BeforePageLoad事件期间打印了两个不同自定义控件的compositeData,一个是调用者,另一个是被调用者。

使用

传递参数dataSource" as-is"
dataSource="#{javascript:compositeData.dataSource}

日志

14:37:29.876 {dataSource=com.ibm.xsp.model.domino.wrapped.DominoDocument@379c379c,dataSource2=com.ibm.xsp.model.domino.wrapped.DominoDocument@379c379c}

14:37:29.894 {dataSource=com.ibm.xsp.binding.javascript.JavaScriptValueBinding@31433143,dataSource2=com.ibm.xsp.binding.javascript.JavaScriptValueBinding@32613261}

出于某种原因,在第二个自定义控件(由第一个控件调用)中,dataSource丢失并变得完全无用。

问题

如果绑定突然改变类型,即从包装的DominoDocument到JavaScriptValueBinding,怎么会发生?我该怎么办呢?

PS dataSource2是一个微弱的尝试,从顶部向下传递第二个参数,绑定到相同的包装NotesDocument。

丑陋的解决方法

我现在使用主页面中声明的原始NotesDocument,而不是通过参数正确传递文档。我们需要这个快速修复才能继续,但是我喜欢对这个bug(XPages或我的?)以及处理参数传递的正确方法有解释。

2 个答案:

答案 0 :(得分:2)

它在我的简单示例中运行良好:

主要XPage

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xc="http://www.ibm.com/xsp/custom">
    <xp:this.data>
        <xp:dominoDocument
            var="document1"
            formName="Test">
        </xp:dominoDocument>
    </xp:this.data>
    <xc:datasource1
        dataSource="#{document1}" />
</xp:view>

自定义控制&#34; datasource1&#34; (第一级)

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xc="http://www.ibm.com/xsp/custom"
    beforePageLoad="#{javascript:print('1: ' + compositeData.dataSource)}">
    datasource1
    <xp:br />
    <xc:datasource2
        dataSource="#{compositeData.dataSource}" />
</xp:view>

自定义控制&#34; datasource2&#34; (第二级)

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    beforePageLoad="#{javascript:print('2: ' + compositeData.dataSource)}">
    dataSource2
</xp:view>

服务器控制台上的输出显示两个级别的正确DominoDocument类型

HTTP JVM: 1: com.ibm.xsp.model.domino.wrapped.DominoDocument@7ee27ee2
HTTP JVM: 2: com.ibm.xsp.model.domino.wrapped.DominoDocument@7ee27ee2

您定义&#34;数据源&#34;的方式并不重要。属性类型 - 它适用于类型&#34;字符串&#34;并使用&#34; com.ibm.xsp.model.domino.DominoDocumentData&#34;。

也许,你可以从这个例子中找出你的代码中的不同之处。

答案 1 :(得分:0)

按设计工作。一个是将参数作为静态值传递,另一个是计算参数。

尝试传递绑定字符串,而不是尝试传递整个文档。这使得它更加灵活,因为您可以改变您对绑定到的内容(bean,范围,对象等)的想法。