我有一个XBL文件,我可以从我的形式传递一些参数,让我们说:处理撒克逊:评估异常
<my-xbl arg1='' arg2=''>
</my-xbl>
<xf:input ref='@arg1'/>
<xf:input ref='@arg2'/>
然后,我有这样的事情:
<xf:model>
<xf:action id="populate-data-binding">
<xf:action context="instance('sub')"
ev:event="xforms-submit-done"
ev:observer="my-submission">
<xf:action>
<xf:var as="xs:string" name="control-value" value="saxon:evaluate(instance('arg1'))"/>
<xf:var as="xs:string" name="control-name" value="saxon:evaluate(instance('arg2'))"/>
<xf:setvalue ref="xxf:instance('fr-form-instance')//*[name() = $control-name]"
value="$control-value"/>
</xf:action>
</xf:action>
</xf:model>
问题是当arg1
是空字符串(这意味着在我的表单中,当我按Control设置和skipp arg1
字段时,只是将它留空),然后我的表单崩溃。当我插入''
或任何东西,但空字符串(asd,q,任何东西)作为arg1
一切都很好。所以现在我想这样做
<xf:var as="xs:string" name=".." value="if(@arg1 ='null') then 'asd'
else 'saxon:evaluate(instance('arg1'))'/>
它不工作,显然是因为报价问题(条件必须为''
之间,我不能把任何引号内),可能别的东西。有人可以帮我解决这个问题吗?提前致谢。
UPDATE:
我想我是有点unprecise。为了清楚起见,arg1
在我的表单中是xf:input
的ID。当表单被加载时,我打电话给一个REST服务(你曾经帮我一次,Event xforms-model-construct-done behaviour),它会发回给我一些数据。现在我想填充数据到我的xf:输入,上面的代码很好。问题是,在我的XBL我有很多的参数,而不仅仅是arg1
,arg2
,它看起来更像
<my-xbl arg1 = '' arg2 = '' ... arg19 = '' arg20 = ''/>
现在,在我的形式,我去控制的基本设置,我必须填写所有paraemters arg1...20
。我只想填写我需要的,通常是3或4,并且让其他人留空。问题是我不能这样做,因为这样我的表单崩溃,这是因为撒克逊:如果它的参数为null,evalute会引发异常。
(另外提一下的一切,但我不认为这是与此有关,但它可以帮助你理解我上面的代码:真实,arg2
是xf:input
但arg1
的ID是一样的东西在web服务资源的路径,fe我有arg2 = "'firstname'"
这是指我的xf:input和arg1 =" //CUSTOMER/FIRSTNAME"
(不含引号),我的REST服务URL是http://www.thomas-bayer.com/sqlrest/CUSTOMER/2/
。这样我可以选择下xf:input id 'firstname'
我想只插入firstname我从webservice获得的数据,然后再次,arg4将像'lastname'
和arg3将是//CUSTOMER/LASTNAME
等等。正如我所说,不认为这里有关)
这就是为什么我想检查空值,我想你的代码应该帮助我 - 不幸的是它不工作。我的表单不再崩溃,但数据也没有填充到xf:inputs
。也许是因为这个误解?谢谢。
在这样的抽象中弄清楚有点难。你能提供一个我可以研究的最小例子吗? – ebruchez
我实际上已经设法解决了这个问题,首先我想我需要一些额外的orbeon知识来解决这个问题,但是你的答案(以及之前的一些答案)帮助我解决了这个问题。谢谢 – pzeszko
很高兴你知道了! – ebruchez