2010-07-16 79 views
3

我有一個顯示狀態的下拉列表,可以是Enabled(true)或Disabled(false)。這是我的xml實例。xforms:如何防止xxforms:覆蓋用戶輸入的默認值

<?xml version="1.0" encoding="UTF-8"?> 
    <page> 
     <file-name></file-name> 
     <status></status> 
    </page> 

默認情況下,狀態應該爲true。所以我把它設置成如下綁定。

<xforms:bind nodeset="./status" xxforms:default="true()" /> 

當用戶在下拉菜單中選擇Disabled時,狀態應該保存爲false。這是保存表單時保存的xml。

<page> 
    <file-name>StatusDisabled.xml</file-name> 
    <status>false</false> 
</page> 

當我打開編輯模式的形式,這是XML我的XML檢查部件得到。

<page> 
    <file-name>StatusDisabled.xml</file-name> 
    <status>true></status> 
</page> 

由於xxforms:default,狀態將被設置爲true,即使xml以狀態值爲假來保存。

我該如何解決這個問題?

這裏是XHTML:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:xforms="http://www.w3.org/2002/xforms" 
xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"> 

    <head> 
     <title>XForms Default</title> 

     <xforms:model> 
      <xforms:instance id="instance"> 
       <page> 
        <name xmlns=""/>  
        <status xmlns=""/> 
       </page> 
      </xforms:instance> 

      <xforms:instance id="status-instance"> 
       <items> 
        <item label="Enabled" value="true" xmlns=""/> 
        <item label="Disabled" value="false" xmlns=""/> 
       </items> 
      </xforms:instance> 

      <xforms:bind nodeset="instance('instance')"> 
       <xforms:bind nodeset="./status" xxforms:default="true()" /> 
      </xforms:bind> 

     </xforms:model> 
    </head> 
    <body> 
     <p> 
      <xforms:input ref="instance('instance')/name" incremental="true"> 
       <xforms:label>Please enter your name:</xforms:label> 
      </xforms:input> 
     </p> 
     <p> 
      <xforms:select1 ref="instance('instance')/status" appearance="minimal" incremental="true"> 
       <xforms:label>Please select status:</xforms:label> 
       <xforms:itemset nodeset="instance('status-instance')/item"> 
        <xforms:label ref="./@label"/> 
        <xforms:value ref="./@value"/> 
       </xforms:itemset> 
      </xforms:select1> 
     </p> 
    </body> 
</html> 
+1

Purni, 這聽起來像是一個bug:使用'xxforms:default =「true()」'如果表單第一次加載時該值爲空,則該值應該初始化爲'true'。但是,如果用戶選擇一個值,並且'false'被存儲在實例中,那麼'false'應該停留在那裏。你能夠創建一個運行在XForms沙箱中的最小示例並顯示它嗎?如果可能的話,你可以編輯你的問題來粘貼這樣一個例子,這樣我們就可以更好地理解這裏發生了什麼。 -Alex – avernet 2010-07-17 23:30:48

+0

@Alessandro - 我已經編輯了我的問題並給了你一步一步的例子。 – Purni 2010-07-19 16:12:20

+0

謝謝,但我需要一個XHTML + XForms文件,我可以在XForms沙箱中運行以重現該問題。否則,我將不得不編寫猜測你所擁有的代碼,並試圖重現這個問題。 – avernet 2010-07-22 18:34:21

回答

1

如果發生這種情況,這是一個錯誤。 xxforms:default應該只評估一次。

+0

我已經通過分步示例編輯了我的問題。它看起來像一個bug。你能幫我解決這個問題嗎? – Purni 2010-07-19 16:13:36

+0

Orbeon 4.5我也有這個問題!是一個知道的錯誤?在這種情況下我們能做些什麼? – oikonomopo 2015-04-03 18:53:49

+1

最初的問題來自2010年。就我們所知,我們現在還沒有一個與此相關的已知錯誤。 – ebruchez 2015-04-04 20:10:30