1

我目前正在为 Orbeon Forms 实现我自己的持久层。据我了解数据的虚拟层次结构,在应用程序“myapp”中使用表单构建器创建一个名为“myform”的表单应该会导致表单构建器调用

/crud/myapp/myform/form/form.xhtml,将新创建的表单作为 HTTP-PUT 数据传递。因此,我创建了一个带有注释的 spring 方法:

@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">是表单的一部分,一旦我填写了表单的值。

4

2 回答 2

1

答案是表单定义可以在两个地方:

  1. 当您使用表单构建器对其进行编辑时,就构建器而言,表单定义只是表单数据。所以它被存储为data.xmlfor orbeon/builder

  2. 当您发布它时,它会被复制到 (HTTP PUT) form.xhtmlfor myapp/myform. 当需要表单定义来查看/编辑/搜索与该表单关联的数据时,也会从那里读取(HTTP GET)。

您可以通过发布表单轻松验证这一点。

好消息是无论如何您都需要 1 来处理已发布表单的表单数据。

请注意,表单定义和表单数据也可以有附件。

于 2012-06-05T16:38:30.433 回答
0

好吧,手册并没有这么明确地说明,但是您应该仔细查看实际调用的 URL /crud/orbeon/builder/data/<some uuid>/data.xml:. 您看到这实际上是如何将表单保存为与 orbeon 构建器关联的实例,并且它不是您的表单被保存?

此方法完成后,您可以按“发布”,这将调用上面所需的 saveForm 方法。

于 2012-06-04T17:17:58.843 回答