【问题标题】:DataContext being executed multiple timesDataContext 被多次执行
【发布时间】:2012-04-11 12:55:16
【问题描述】:

有没有人注意到 xpages 中的数据上下文存在问题。在某些情况下,带有多个自定义控件的单个 xpage 会导致在单个页面加载期间对 datacontext 进行 12 次评估?其他数据源也会发生这种情况吗?

这是一个简单的例子,执行了 3 次!!

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xp:this.dataContexts>
        <xp:dataContext var="doc1">
            <xp:this.value><![CDATA[#{javascript:var doc:NotesDocument = database.createDocument();
doc.replaceItemValue("Form", "frmContact");
doc.replaceItemValue("fldFirstName", "test");
print("got here");
return doc;}]]></xp:this.value>
        </xp:dataContext>
    </xp:this.dataContexts>
    <xp:inputText id="inputText1" value="#{doc1.fldFirstName}"></xp:inputText>
</xp:view>

我不应该在我的应用程序中使用 dataContexts 吗?

【问题讨论】:

    标签: xpages


    【解决方案1】:

    如果您使用的是部分刷新,请注意。假设,您的数据上下文位于 id B 中,并且您对 id A 进行了刷新。id B 中的数据上下文也将被刷新。所有其他数据源也会发生这种情况。

    我已经在http://www-10.lotus.com/ldd/xpagesforum.nsf/topicThread.xsp?action=openDocument&documentId=56E9B8537DA50A90852579A6002EAC64#FA00DE3675A456C0852579AB005A1FF4描述了这种行为

    还有一些关于 PMR 的提示以及可能的解决方法。

    【讨论】:

    • 感谢 Ulrich - 我希望他们尽快解决这个问题,我在 Xpages 和自定义控件中到处使用数据上下文!解决方法实际上不适用于 Domino 对象,是吗?
    【解决方案2】:

    就像页面上的其他控件一样,数据上下文可以被多次评估。请参阅here 了解有关 dataContexts 好处的更多信息。但在我看来,从您的代码示例来看,使用 xp:data 源可能会更快,但我不确定。

    【讨论】:

    • 非常感谢 Ferry - 这是一个非常简单的示例,我在其他地方以复杂的方式使用它,但它被多次执行的事实令人担忧!我不知道有什么方法可以检查 xp:datasource 加载了多少次,但我想它可能会做同样的事情!
    【解决方案3】:

    与所有其他值绑定一样,如果将 # 更改为 $,则可能会多次请求 dataContext 的 value 属性,但确定该值的计算只会执行一次.

    【讨论】:

    • 我不确定这是否适用于此,除非我弄错了,否则您不能真正将负载计算 ($) 与多米诺对象一起使用?
    • # vs. $ 只是决定如何分配属性值。 # 表示创建了一个值绑定对象并与该属性相关联,因此每次访问该属性时,它都会询问该值绑定它当前评估的内容。 $ 只是意味着当对象被实例化时,它会计算一次表达式,并将结果直接分配给属性的本地值。因此,每次访问该属性时,它都会返回该值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多