我有两个通常应该可重复使用的自定义控件。一个是简单的字段格式(标签,样式等)。一个重复用于表格编辑。对于编辑我正在传递它应该使用的数据源。
问题是,如果我尝试在编辑器中创建控件并将其放入格式化控件中,则从最后一个上下文中计算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'时出错任何想法如何使这项工作?
答案 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中评估参数的形式名称并相应地映射它。