代码之家  ›  专栏  ›  技术社区  ›  user2316219

重复控件中的自定义属性停止工作

  •  0
  • user2316219  · 技术社区  · 10 年前

    我有一个奇怪的bug,可以复制,但我找不出是什么原因导致的。 如果我调用这个xpage,我会得到以下错误消息:

    执行JavaScript计算表达式时出错

    未找到“fieldname”

    <?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"
    xmlns:xc="http://www.ibm.com/xsp/custom">
    <xp:this.data>
        <xp:dominoDocument var="Request"></xp:dominoDocument>
    </xp:this.data>
    <xp:repeat rows="999" var="fieldname">
        <xp:this.value><![CDATA[#{javascript:"myfieldname"}]]></xp:this.value>
        <xc:Widgets_Field
            field_datasource="#{javascript:currentDocument}"
            field_name="#{javascript:fieldname}">
        </xc:Widgets_Field>
    </xp:repeat>
    

    我试图清空cc,但没有成功。唯一有效的是,当我对属性field_name进行硬编码时,或者当我将repeat控件设置为“在页面创建时创建控件”时

    我绝对确定代码之前是有效的,但我无法找出导致错误消息的原因。你能试一下吗?如果你也有同样的问题,请告诉我。

    附件请参见堆栈跟踪

    com.ibm.xsp.exception.EvaluationExceptionEx: Error while executing JavaScript computed expression
    com.ibm.xsp.binding.javascript.JavaScriptValueBinding.getValue(JavaScriptValueBinding.java:132)
    com.ibm.xsp.page.compiled.ExpressionEvaluatorImpl.getBindingValue(ExpressionEvaluatorImpl.java:151)
    xsp.Widgets_005fField$Widgets_005fFieldPage.createInputText4(Widgets_005fField.java:776)
    xsp.Widgets_005fField$Widgets_005fFieldPage.createComponent(Widgets_005fField.java:142)
    com.ibm.xsp.page.compiled.AbstractCompiledPage.buildComponent(AbstractCompiledPage.java:265)
    com.ibm.xsp.page.compiled.CompiledComponentBuilder.buildChildren(CompiledComponentBuilder.java:115)
    com.ibm.xsp.page.compiled.CompiledComponentBuilder.buildAll(CompiledComponentBuilder.java:84)
    
    1 回复  |  直到 10 年前
        1
  •  3
  •   Serdar Basegmez    10 年前

    在自定义控件中,如果使用了在页面加载时应该知道的错误绑定,则会引发这样的错误。例如,如果自定义控件包含“已加载”属性,如:

    <xp:text
      loaded="${compositeData.field_name}">
    

    这会引发这样的错误。这就是为什么它使用“在页面创建时创建控件”设置。

    更新:如果您打算在自定义控件中使用动态绑定,请参阅我对这个问题的回答:

    Dynamic Data Binding?