我目前正在为Orbeon表单实现我自己的持久层。就我对virtual hierachy of data的理解而言,在应用程序"myapp“中使用form Builder创建名为"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">部分,一旦我填写了表单的值。
发布于 2012-06-06 00:38:30
答案是表单定义可以在两个地方:
orbeon/builder.data.xml,你发布它,它被复制到(HTTP PUT) myapp/myform的form.xhtml中。当需要表单定义来查看/编辑/搜索与该表单关联的数据时,也会从那里读取(HTTP GET)。您可以通过发布表单轻松地验证这一点。
好消息是,您无论如何都需要上面的1来处理已发布表单的表单数据。
请注意,表单定义和表单数据都可以有附件。
发布于 2012-06-05 01:17:59
虽然手册没有明确说明,但您应该仔细查看一下实际称为:/crud/orbeon/builder/data/<some uuid>/data.xml的URL。您看到这实际上是如何将表单保存为与orbeon构建器关联的实例,而不是您要保存的表单?
此方法完成后,您可以按"publish“,这将调用上面所需的saveForm方法。
https://stackoverflow.com/questions/10884207
复制相似问题