2012-06-04 100 views
0

我目前正在爲Orbeon Forms實現我自己的持久層。就我所瞭解的virtual hierachy of data而言,在名爲「myform」的應用程序「myapp」中使用Form Builder創建表單應導致表單構建器調用Orbeon Forms Builder自定義持久性API:爲什麼它調用/crud/.../data/data.xml?

/crud/myapp/myform/form/form.xhtml ,將新創建的表單作爲HTTP-PUT數據傳遞。因此,我創建了一個彈簧方法註釋:

@RequestMapping(method = RequestMethod.PUT, value = "/crud/{applicationName}/{formName}/form/form.xhtml") 
public void saveForm(@PathVariable String formName, @RequestBody String putData) 

我期望用我的表單調用此方法。但是這個方法沒有被調用。相反的方法

@RequestMapping(method = RequestMethod.PUT, value = "/crud/{applicationName}/{formName}/data/{uuid}/data.xml") 
public void saveInstance(@PathVariable String uuid, @RequestBody String putData) 

被調用。 putData包含完整的XHTML表單。這是爲什麼發生?我認爲只有在填寫表單的值後,纔會調用第二個URL來保存實例,更具體地說是表單的<xforms:instance id="fr-form-instance">部分。

回答

1

答案是表單定義可以在兩個地方:

  1. 當你編輯它與窗體生成器,表單定義是剛剛形成的數據儘可能的建設者而言。所以它的存儲爲data.xmlorbeon/builder

  2. 當你發佈它,它被複制到(HTTP PUT)form.xhtmlmyapp/myform。當需要表單定義來查看/編輯/搜索與該表單相關的數據時,它也從那裏讀取(HTTP GET)。

您可以通過發佈表單輕鬆進行驗證。

好消息是,您需要1以上來處理髮布表單的表單數據。

請注意,表單定義和表單數據都可以具有附件。

0

那麼手冊沒有這麼明確地說,但你應該看看你實際調用的URL:/crud/orbeon/builder/data/<some uuid>/data.xml。你會看到這實際上是如何將這個窗體作爲一個與orbeon構建器相關聯的實例進行保存的,並且這不是你保存的窗體?

此方法完成後,您可以按「發佈」,它將調用上面所需的saveForm方法。

相關問題