我有一个自定义控件,它具有我定义的属性。我在复合数据中使用自定义控件上的标签。标签显示得很好,但我想使用标签和复合数据在控件之外的控件上使用标签的值。
但它为标签的值返回null。似乎每次访问标签值时都会计算复合数据,并且计算的参考点似乎是访问标签值的控件而不是包含它的控件。
我计划使用范围变量,但有什么方法可以使复合数据有效吗?
答案 0 :(得分:3)
复合数据仅存在于定义它的自定义控件中。因此,向外伸展比向内伸展要容易得多。
除了范围变量之外,另一种方法是定义dataContext。这在技术上仍然是范围变量的使用,因为它将变量暂时推送到requestScope中,但稍微更容易使用,因为您不必明确告诉它这样做......它只是这样做。例如:
<xp:view
xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xc="http://www.ibm.com/xsp/custom">
<xp:this.dataContexts>
<xp:dataContext
var="labelValue"
value="#{someExpression}" />
</xp:this.dataContexts>
<xp:text
value="#{labelValue}" />
<xc:labelContainer
labelValue="#{labelValue}" />
</xp:view>
在上面的例子中,我附加了这个labelValue dataContext的容器中的任何地方,我都可以引用#{labelValue},它将返回该dataContext返回的表达式的任何值。这为您提供了一个可以在XPage中使用的单个变量,但也传递给了自定义控件。
答案 1 :(得分:1)
我喜欢Tim对数据上下文的建议。但是,如果必须,您可以访问控件的propertyMap上的值。这不是标签,而是复合数据。这就是组件可以“回话”的方式