Orbeon表单生成器 - 引用节模板中的控件

时间:2011-09-28 22:28:41

标签: orbeon xforms

我有许多表格都引用了“标题”部分模板。我想从表单中的另一个控件引用此部分模板中的控件。 (使用此处显示的方法:Write constraint to validate a field based on the value entered in another field in Orbeon Form Builder

当我尝试在节模板中引用名为“section”的控件时出现以下错误:

  

独立表达式中的未声明变量:$ section

这是我正在使用的XPath表达式:

if($section = 'PKP' or $section = '') then true() else false()

在Section模板中有一个名为'section'的控件,但似乎无法从表单的其余部分访问它。

是否有人知道是否可以引用Orbeon表单构建器中“Section Template”中的控件?

2 个答案:

答案 0 :(得分:5)

正如您所注意到的,假设字段名称为$gaga,则无法使用命名gaga访问该部分之外的部分模板字段的值。这是因为您可以在表单中拥有相同节模板的多个“实例”。想象一下,您有一个“地址”部分模板,并在“结算地址”和“送货地址”的表单中插入两次。然后,如果在这些部分模板之外使用$city,您将不知道它是否引用了结算或送货地址中的“城市”字段。

相反,在将部分模板添加到表单时,您需要为这些部分指定名称(例如billing-address)并使用XPath表达式(例如/form/billing-address/city)来引用该值帐单邮寄地址中的城市字段。

答案 1 :(得分:0)

我不使用表单构建器来开发表单,但根据错误,查看是否有$ section的变量声明代码。任何以$开头的东西都是变量,因此需要变量声明。如果声明了变量,则相应的行可能看起来是

<xxforms:variable name="section" select="<some_xpath_expression_here>" />

如果您不想使用变量,请尝试使用nodeset引用。假设'section'在'my-instance'模型实例中,你可以像这样编写节点集。

if(instance('my-instance')/section = 'PKP' or instance('my-instance')/section = '') then true() else false()