Orbeon Forms Builder自定义持久性API:为什么调用/crud/.../data/data.xml?

时间:2012-06-04 15:51:49

标签: orbeon

我目前正在为Orbeon Forms实现自己的持久层。据我了解virtual hierachy of data,在应用程序“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">部分。

2 个答案:

答案 0 :(得分:1)

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

  1. 当您使用表单构建器编辑时,表单定义就构建数据而言只是表单数据。因此data.xml存储为orbeon/builder

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

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

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

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

答案 1 :(得分:0)

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

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