XForms:使用calculate和xxforms:nodeset绑定中的default属性

时间:2010-06-25 19:09:11

标签: xforms

我让form1将查询字符串参数(param1)传递给form2。我从form1传递param1 = true。在表单2中,我试图将param1的值设置为本地实例。如果我不从表单1传递param1,我希望form2将param1的值设为false。这是我的实例。

<xforms:instance id="querystring-instance">
    <query-string>
        <param1></param1>
    </query-string>
</xforms:instance>

我使用以下行来设置param1的值,方法是从查询字符串中获取它。如果查询字符串没有param1,我想使用默认值false。

<xforms:bind nodeset="instance('querystring-instance')/param1" calculate="xxforms:get-request-parameter('param1')" xxforms:default="false()" />

这不起作用。如果存在param1,它将工作并将in querystring-instance设置为true。如果param1不存在,则设置为空。我希望它被设置为false。我该怎么做?

1 个答案:

答案 0 :(得分:2)

您可能只想在初始化时设置参数,因此请使用xxforms:default代替calculate。将在每个XForms重新计算时评估calculate,这将失败,因为xxforms:get-request-parameter()仅在XForms初始化期间可用。

您可以在XPath中实现该条件。

如果缺少参数,

xxforms:get-request-parameter()将返回空序列。这应该有效:

<xforms:bind nodeset="instance('querystring-instance')/param1"
             xxforms:default="(xxforms:get-request-parameter('param1'), 'false')[1]"/>

这样做的是,如果xxforms:get-request-parameter()返回一个空序列,那么序列的第一个值将为'false',这就是用于设置值的内容。