基于复合数据获取标签的价值

时间:2012-03-12 18:11:48

标签: xpages

我有一个自定义控件,它具有我定义的属性。我在复合数据中使用自定义控件上的标签。标签显示得很好,但我想使用标签和复合数据在控件之外的控件上使用标签的值。

但它为标签的值返回null。似乎每次访问标签值时都会计算复合数据,并且计算的参考点似乎是访问标签值的控件而不是包含它的控件。

我计划使用范围变量,但有什么方法可以使复合数据有效吗?

2 个答案:

答案 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上的值。这不是标签,而是复合数据。这就是组件可以“回话”的方式