我目前正在为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">
部分。
答案 0 :(得分:1)
答案是表单定义可以分为两个地方:
当您使用表单构建器编辑时,表单定义就构建数据而言只是表单数据。因此data.xml
存储为orbeon/builder
。
当您发布时,会将其复制到form.xhtml
的(HTTP PUT)myapp/myform
。当需要表单定义来查看/编辑/搜索与该表单相关联的数据时,也可以从那里读取(HTTP GET)。
您可以通过发布表单轻松验证这一点。
好消息是,您无论如何都需要1个来处理已发布表单的表单数据。
请注意,表单定义和表单数据也可以包含附件。
答案 1 :(得分:0)
本手册没有明确说明,但您应该仔细查看实际调用的URL:/crud/orbeon/builder/data/<some uuid>/data.xml
。您看到这实际上是如何将表单保存为与orbeon构建器关联的实例,并且不是您的表单保存了吗?
完成此方法后,您可以按“发布”,这将调用上面所需的saveForm方法。