Xpages 带回调的嵌套自定义控件的复合数据

Xpages 带回调的嵌套自定义控件的复合数据,xpages,Xpages,我有两个自定义控件,它们通常应该是可重用的。一种是用于字段的简单格式设置(带有标签、样式等)。其中一个在repeat中重复使用,用于表编辑。我正在将它应该使用的数据源传递给编辑 问题是,如果我尝试在编辑器中创建控件并将其放入格式化控件中,compositeData将根据上一个控件的上下文进行计算,因此它无法找到数据源 简单的设置是: Xpage 米德拉克 <xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://

我有两个自定义控件,它们通常应该是可重用的。一种是用于字段的简单格式设置(带有标签、样式等)。其中一个在repeat中重复使用,用于表编辑。我正在将它应该使用的数据源传递给编辑

问题是,如果我尝试在编辑器中创建控件并将其放入格式化控件中,compositeData将根据上一个控件的上下文进行计算,因此它无法找到数据源

简单的设置是:

Xpage


米德拉克

<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
 xmlns:xc="http://www.ibm.com/xsp/custom">
  <xp:inputText id="inputText1" value="#{compositeData.ds.myfield}"></xp:inputText>
  <xc:lastCC>
    <xp:inputText id="inputText2" value="#{compositeData.ds.myfield}"></xp:inputText>
  </xc:lastCC>
</xp:view>

lastCC

<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
 <xp:callback />
</xp:view>

我得到了一个错误

测试类型为null的bean中的属性“myfield”时出错


有什么办法可以让这一切顺利进行吗?

您可能需要重新构建您的解决方案。不要试图通过参数传递数据源,而是在最后一步将计算结果的字符串传递给数据源。所以你的中部看起来像这样:

<xc:lastCC BindTo="#{compositeData.dsName}.fieldName">
    <xp:inputText id="inputText2">
       <xp:this.value><![CDATA[${javascript:"#{"+compositeData.BindTo+"}"}]]></xp:this.value>
    </xp:inputText>
<xc:lastCC>

让我们知道进展如何

正如Stephan建议的那样,我必须将必要的上下文进一步传递给lastCC。我还可以传递数据源

<xc:lastCC >
    <xc:this.ds>
        <![CDATA[#{compositeData.ds}]]>
    </xc:this.ds>
    <xp:inputText id="inputText2"
        value="#{compositeData.ds.myfield}">
    </xp:inputText>
</xc:lastCC>


代码比我预期的还要多,但至少我可以让它保持可重用性(据我所知,如果我使用不同的ds,我必须计算LastCC中参数的表单名称并相应地映射它。

您的ds属性在middleCC上是如何定义的?如com.ibm.xsp.model.domino.DominoDocumentData。如果直接在该CCC中使用,它可以正常工作。但同样,我可以直接传递数据源。我误解了od回调是如何解释的。它只是以相同的方式计算所有内容,就像我复制粘贴它来代替回调一样。这是正确的。回调成为控件的一部分。您可能仍然希望选择字符串版本,因为您可以更灵活地使用数据源。任何有效的EL都可以工作
<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"></xp:dominoDocument>
 </xp:this.data>
 <xc:middleCC dsName="document1">
 </xc:middleCC>
</xp:view>
<xc:lastCC >
    <xc:this.ds>
        <![CDATA[#{compositeData.ds}]]>
    </xc:this.ds>
    <xp:inputText id="inputText2"
        value="#{compositeData.ds.myfield}">
    </xp:inputText>
</xc:lastCC>