1

我正在创建一个小型 XForms 应用程序来帮助一些合作者创建复杂的元数据记录(TEI 标头)。我假设用户可能需要不止一个会话来完全填写项目请求的所有元数据。因此,我希望能够将表单数据保存到以项目特定标识符命名的文件中,然后允许返回用户从部分完成的表单列表中进行选择,将数据加载回编辑器并继续工作。不幸的是,我无法让加载功能按预期工作——也就是说,在我从列表中选择文件名后,我无法将保存的表单中的数据加载回编辑器。

以下是我模型中的实例:

<xf:instance id="itemMD" xmlns="http://www.tei-c.org/ns/1.0"
src="http://localhost:8080/exist/rest/db/home/sga/model.sga.metadata.xml"></xf:instance>

<xf:instance id="control-codes" xmlns="">
    <data>
        <boolean1>false</boolean1>
        <output-filename>temp</output-filename>
        <input-filename></input-filename>
    </data>
</xf:instance>

<xf:instance id="file-utils" xmlns="http://exist.sourceforge.net/NS/exist" src="http://localhost:8080/exist/rest/db/home/sga/posted_data/"></xf:instance>

以下是提交元素:

<xf:submission id="save" method="put"
replace="none">
<xf:resource value="concat('http://localhost:8080/exist/webdav/db/home/sga/posted_data/', instance('control-codes')/output-filename)"></xf:resource>
</xf:submission>

<xf:submission id="load" method="get" replace="instance" instance="itemMD">
<xf:resource value="concat('http://localhost:8080/exist/webdav/db/home/sga/posted_data/', instance('control-codes')/input-filename)">
</xf:resource>
<xf:message ev:event="xforms-submit-error">Cannot load!</xf:message>
</xf:submission>

以下是文档正文中的相关小部件:

<div id="loader" class="span4 offset8">
<xf:select1 id="load-from-file" ref="instance('control-codes')/input-filename">
<xf:label>Choose file: </xf:label>
<xf:itemset nodeset="instance('file-utils')//exist:resource">
<xf:label ref="@name"></xf:label>
<xf:value ref="@name"></xf:value>
</xf:itemset>
</xf:select1>
<xf:submit submission="load">
<xf:label>Load</xf:label>
</xf:submit>
</div>

这是我第一次使用 XForms 进行认真的工作,所以也许这里有一些我应该能够修复的明显问题,但我很难过。(我也想知道我是否在这里传递了一个我应该传递 URI 的字符串?)。我正在使用 eXistDB 附带的 XSLTForms 处理器

4

2 回答 2

1

当然,网络分析器是浏览器调试器中用于检查 XSLTForms 生成的 HTTP 请求是否正常的最佳工具。

例如,您熟悉 Firebug 吗?

以下测试用例对我有用:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ev="http://www.w3.org/2001/xml-events">
 <head>
   <title>Save-Load</title>
   <xf:model>
           <xf:instance id="itemMD">
                <data xmlns=""/>
            </xf:instance>
            <xf:instance id="control-codes" xmlns="">
                <data>
                    <boolean1>false</boolean1>
                    <output-filename>temp.xml</output-filename>
                    <input-filename>temp.xml</input-filename>
                </data>
            </xf:instance>
            <xf:submission id="save" method="put" replace="none">
                <xf:resource value="concat('http://localhost/direct/', instance('control-codes')/output-filename)"/>
            </xf:submission>
            <xf:submission id="load" method="get" replace="instance" instance="itemMD">
                <xf:resource value="concat('http://localhost/direct/', instance('control-codes')/input-filename)"/>
                <xf:message ev:event="xforms-submit-error">Cannot load!</xf:message>
            </xf:submission>
        </xf:model>
 </head>
 <body>
    <xf:input ref=".">
        <xf:label>Data: </xf:label>
    </xf:input>
    <br/>
    <xf:input ref="instance('control-codes')/output-filename">
        <xf:label>Output File: </xf:label>
    </xf:input>
    <xf:submit submission="save">
        <xf:label>Save</xf:label>
    </xf:submit>
    <br/>
    <xf:input ref="instance('control-codes')/input-filename">
        <xf:label>Input File: </xf:label>
    </xf:input>
    <xf:submit submission="load">
        <xf:label>Load</xf:label>
    </xf:submit>
   <br/>
 </body>
</html>

感谢您的反馈!

-阿兰

于 2012-07-19T15:40:41.523 回答
1

我没有看到任何明显的错误,但是(如果您仍在为此作斗争)这里有一些事情要做:

将类似的内容添加到您的文档中,靠近Choose file:控件。(为了易读性,我在这里打断了线条;您可能需要撤消它。)

  <div>Debugging:
    <xf:output value = 
       "concat('http://localhost:8080',
               '/exist/webdav/db/home',
               '/sga/posted_data/',
               instance('control-codes')/input-filename
               )">
      <xf:label>URI for document request: </xf:label>
    </xf:output>
  </div>

这应该显示您的load提交正在获取的 URI。

然后手动取消引用该 URI 以查看是否可以。(如果你不能,你已经找到了问题。)

如果取消引用 URI 是手动工作但不是自动工作,请尝试对 URI 进行硬编码(暂时),这样无论用户选择什么文件,提供的文件都是您硬编码的文件。即用文字单引号字符串替换属性中 的concat()表达式:如果失败,请检查服务器日志以查看 HTTP请求使用的 URI。(有时当我粗心时,我忽略了我的提交会将默认实例的内容作为查询参数提交,除非我采取措施说不这样做;然后我必须再次查找它们并修复问题。)xf:resource/@valuevalue="'http://localhost...'"GET

于 2012-08-20T02:33:43.767 回答