我有一個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