我如何调试xform提交?

时间:2014-05-13 16:44:49

标签: xml xhtml xquery xforms exist-db

我在xhtml文件中修改xform时遇到了麻烦。以前它工作,但现在我改变了xf:model的命名空间中的一些东西,现在当我按下提交按钮时它没有做任何事情。我将举一个简单的例子,以便您更好地理解我的问题,但请记住,我在一个包含400多行的xhtml文件中工作,而且我已经失去了几个小时(差不多40个)上周的小时数)逐行调试,反复试验,找出我的表格有什么问题。

    <html namespaces come here>
    <head>
       <title>Example</title>
       <xf:model schema="foobar.xsd">
         <xf:instance>
            <Persons xmlns="">
               <name></name>
            </Persons>
         <xf:/instance>
       </xf:model>
       <xf:bind id=name nodeset="/Person/aluno" type="xs:string"/>
       <xf:submission id="submit" action="http://localhost:8080/exist/rest/db/apps/foo/bar.xquery" method="post"/>
    </head>
    <body>
      <h1>Type the name of the Person</h1>
      <xf:input bind="name">
       <xf:label>
                <b>Name:</b>
       </xf:label>
      </xf:input>
      <xf:submit submission="submit">
        <xf:label>SUBMIT</xf:label>
      </xf:submit>
    </body>
    </html>

好的,这是一个简单的例子(它可能有一些错误,并不重要),但想象一下,每次按SUBMIT它都不会做任何事情。 如何找到导致错误的原因?

2 个答案:

答案 0 :(得分:0)

@loveMeansNothing以下错误消息:“未知XML根元素:wiki:article_container”您尚未在'html上声明命名空间xmlns:wiki =“http://www.generic-wiki.org/Wiki” '元素?此外,您在提交时缺少xforms @replace属性,这意味着它默认为replace =“all”(遵循XForms W3C建议),您是否尝试过@ repalce =“none”或@ replace =“instance”(取决于你想要存档的内容)?

关于betterFORM的调试@adamretter已经指出了在哪里查找日志以及如何启用调试栏。您还可以在提交中添加xforms-submit-error处理程序:

<xf:submission id="..." ...>
  <xf:action ev:event="xforms-submit-error">
    <xf:message>Submit Error! Resource-uri: <xf:output value="event('resource-uri')"/>
                Response-reason-phrase: <xf:output value="event('response-reason-phrase')"/>
    </xf:message>
  </xf:action>
</xf:submission>

我经常使用Firebug进行调试。

如果这一切都无法解决您的问题,那么有一个表单的运行示例来重现错误会很棒。

答案 1 :(得分:0)

最后我找到了解决方案!

它错过了

调用的xquery上的一个愚蠢的斜线
      <xf:submission id="submit" action="http://localhost:8080/exist/rest/db/apps/myapp/logic/action.xquery" method="post"/>

如果看起来像这样:

let $store:=xmldb:store('db/apps/myapp/data','test.xml', $newArticle)

虽然它应该看起来(见斜杠):

let $store:=xmldb:store('/db/apps/myapp/data','test.xml', $newArticle)

我也创建了一个新用户,并通过exists-db Java Admin Client将他添加到'dba'组。之后,我使用新的用户名凭据在上创建了一个新应用程序。此处也使用了该用户:

   let $login:=xmldb:login('/db/apps/myapp','user','password')

感谢帮助人们:)