表达式语言等效于getComponent()

jjt*_*rst 3 el xpages

我无法在java中的任何地方找到它,但有人知道EL等价物是getComponent("name").值?

Tim*_*ony 11

这是组件绑定的任何内容......因此,如果您的页面包含:

<xp:inputText value="#{currentDocument.subject}" />
Run Code Online (Sandbox Code Playgroud)

...然后这将显示相​​同的结果:

<xp:text value="#{currentDocument.subject}" />
Run Code Online (Sandbox Code Playgroud)

您还可以使用任何标准EL运算符引用该值; 例如:

<xp:label rendered="#{not(empty(currentDocument.subject))}" ...>
<xp:comboBox rendered="#{currentDocument.totalAmount gt 1000}" ...>
<xp:panel rendered="#{currentDocument.optIn eq 'Yes'}" ...>
Run Code Online (Sandbox Code Playgroud)

EL还支持"关联数组"语法,当需要引用动态命名的属性或在自定义控件外部可编辑的属性但需要在自定义控件中引用它们时,这种语法很方便.举例来说,如果你定义dataSourcepropertyName为您的自定义控制自定义属性,你可以在从上下文"知道"他们是什么将它们传递:

<xc:dynamicLabel dataSource="currentDocument" propertyName="subject" />
Run Code Online (Sandbox Code Playgroud)

...然后在自定义控件中引用它们:

<xp:label text="#{compositeData.dataSource[compositeData.propertyName]}" />
Run Code Online (Sandbox Code Playgroud)

当然,所有这些都适用于XPage引擎知道如何通过EL引用的任何类型:

  • SSJS对象
  • Java Maps(即范围变量)
  • 实例DataObject(标准Domino文档数据源,自定义实现等)
  • 任何有效的Java bean(遵守bean约定)

确切地说,当解释EL时,变量解析器检查它是否是前三个中的一个,如果是,则以特定于该类型的方式评估任何属性.如果它不是前三个中的一个,它假定它是一个bean.

总而言之,任何给定的组件都不"知道"它自己的价值.如果以编程方式获取组件的句柄并调用其getValue方法,则该方法将检查其值是否为值绑定(EL,SSJS等).如果是,则它计算该表达式并返回结果.因此,如果您在其他地方需要相同的结果,也可以在备用位置使用相同的表达式,因为它将返回相同的结果......只是不要将value多个可编辑组件的属性绑定到同一个表达式; 这会产生不可预测的结果.