2010-06-25 51 views
2

我有form1将查询字符串参数(param1)传递给form2。我从form1传递param1 = true。在表单2中,我试图将param1的值设置为本地实例。如果我不从表单1传递param1,我希望form2将param1的值设为false。这是我的例子。XForms:使用calculate和xxforms:nodeset绑定中的默认属性

<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存在,它将工作并将querystring-instance设置为true。如果param1不存在,它将设置为无。我希望它被设置为false。我该怎么做呢?

回答

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()返回一个空序列,则该序列的第一个值将是“假”,这就是将被用于设置值。

+0

谢谢!有用。 – Purni 2010-06-28 20:08:09