1

一部の共同作業者が複雑なメタデータレコード(TEIヘッダー)を作成するのに役立つ小さなXFormsアプリケーションを作成しています。プロジェクトによって要求されたすべてのメタデータを完全に入力するには、ユーザーが複数のセッションを必要とする可能性があることを前提に進めています。ですから、私がやりたいのは、フォームデータをアイテム固有の識別子で名前が付けられたファイルに保存し、リピーターが部分的に完成したフォームのリストから選択して、データをエディターにロードして作業を再開できるようにすることです。残念ながら、ロード機能を期待どおりに機能させることができません。つまり、リストからファイル名を選択した後、保存したフォームからエディターにデータをロードして戻すことができません。

これが私のモデルのインスタンスです:

<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()つまり、属性の式をxf:resource/@valueリテラルの単一引用符で囲まれた文字列 に置き換えます。value="'http://localhost...'"それが失敗した場合は、サーバー ログをチェックして、HTTPGET要求に使用された URI を確認します。(私が不注意だったとき、送信しないように指示しない限り、送信時にデフォルト インスタンスの内容がクエリ パラメータとして送信されることを怠っていたことがあります。その後、それらをもう一度調べて修正する必要があります。)

于 2012-08-20T02:33:43.767 に答える