具有回调的嵌套自定义控件的compositeData

时间:2014-03-03 17:09:57

标签: xpages

我有两个通常应该可重复使用的自定义控件。一个是简单的字段格式(标签,样式等)。一个重复用于表格编辑。对于编辑我正在传递它应该使用的数据源。

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

简单设置:

XPAGE

 <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>
  <xc:this.ds>
    <![CDATA[#{javascript:document1;}]]>
  </xc:this.ds>
 </xc:middleCC>
</xp:view>

middleCC

<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'时出错

任何想法如何使这项工作?

2 个答案:

答案 0 :(得分:0)

您可能希望稍微重新构建您的解决方案。而不是尝试通过参数传递数据源,而是在最后一步传递一个计算结果为数据源的字符串。所以你的中间会是这样的:

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

你的lastCC需要一个参数BindTo(选择你自己的名字),你的XPage看起来像:

<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>

让我们知道它是怎么回事

答案 1 :(得分:0)

正如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中评估参数的形式名称并相应地映射它。