0

Orbeon Forms のフィールドの読み取り専用動作に問題があります。通常、フィールドをいつ読み取り専用にするかを示す条件をバインド定義に記述します。そのため、条件が満たされた場合、フォーム (HTML ブラウザー) のフィールドは編集できなくなります。

ただし、フィールドの HTML ページ ソースでは、フィールドがプロパティ disabled="disabled" を保持しているが、readonly="readonly" を保持していないことがわかります。プロパティ disabled="disabled" により、入力フィールドのデータは灰色 ( IE ブラウザー、Windows のデフォルトの外観) で表示され、ぼやけたりくすんで見えたりするため、正しく表示されません。また、無効なフィールドの css プロパティで入力データの色を変更することはできませんが、プロパティ readonly="readonly" を持つフィールドでは変更できます。

そこで問題は、Orbeon コードのバインド定義で readonly="true" と指定した場合、HTML ブラウザのフィールドのプロパティを disabled="disabled" ではなく readonly="readonly" として取得できるかどうかです。

サンプルの Orbeon コードと HTML ページ ソースのスナップショットを以下に示します。

<xhtml:html xmlns:xforms="http://www.w3.org/2002/xforms"
    xmlns:f="http://orbeon.org/oxf/xml/formatting"
    xmlns:xhtml="http://www.w3.org/1999/xhtml"
    xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
    xmlns:ev="http://www.w3.org/2001/xml-events"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    >

    <xhtml:head>
        <xforms:model xmlns:xforms="http://www.w3.org/2002/xforms"
                xmlns:xs="http://www.w3.org/2001/XMLSchema" id="main-model">

          <xforms:instance id="form-instance">
            <form>
              <field-1></field-1>
              <field-2></field-2>
              <field-3></field-3>
            </form>
          </xforms:instance>

          <xforms:instance id="form-attributes">
            <attributes>
                <summary>false</summary>
            </attributes>
          </xforms:instance>

          <xforms:bind id="summary" nodeset="instance('form-attributes')/summary" />
          <xxforms:variable name="summary" select="instance('form-attributes')/summary" />

          <xforms:bind nodeset="instance('form-instance')" readonly="$summary='true'" />

          <xforms:bind id="field-1" nodeset="instance('form-instance')/field-1" />
          <xforms:bind id="field-2" nodeset="instance('form-instance')/field-2" />
          <xforms:bind id="field-3" nodeset="instance('form-instance')/field-3" />

        </xforms:model>
    </xhtml:head>

    <xhtml:body>

      <table>
        <tr>
            <td>
                <xforms:trigger appearance="minimal" id="readonly-view">
                    <xforms:label>Readonly View</xforms:label>
                    <xforms:action ev:event="DOMActivate">
                        <xforms:setvalue bind="summary" value="'true'" />
                    </xforms:action>
                </xforms:trigger>
            </td>
            <td>
                <xforms:trigger appearance="minimal" id="editable-view">
                    <xforms:label>Editable View</xforms:label>
                    <xforms:action ev:event="DOMActivate">
                        <xforms:setvalue bind="summary" value="'false'" />
                    </xforms:action>
                </xforms:trigger>
            </td>
        </tr>
        <tr>
            <td>
                Field 1: 
            </td>
            <td>
                <xforms:input bind="field-1" id="field-1-id" xxforms:maxlength="10" /> 
            </td>
        </tr>
        <tr>
            <td>
                Field 2: 
            </td>
            <td>
                <xforms:input bind="field-2" id="field-2-id" xxforms:maxlength="10" /> 
            </td>
        </tr>
        <tr>
            <td>
                Field 3: 
            </td>
            <td>
                <xforms:input bind="field-3" id="field-3-id" xxforms:maxlength="10" /> 
            </td>
        </tr>
      </table>

    </xhtml:body>
</xhtml:html>

HTML ページ ソースのスナップ ショット:

ここに画像の説明を入力

4

1 に答える 1

0

この時点で、お気づきのように、Orbeon Forms はdisabled="disabled"ではなく、読み取り専用のフォーム フィールドで生成されますreadonly="readonly"。これは、Orbeon Forms を変更せずに変更することはできません。

問題の可能な解決策は、読み取り専用フォーム フィールドではなく、フィールドの値を表示するだけの静的な外観を使用することです。xf:outputこれは通常、ユーザーが入力したすべての値を送信前に表示するレビュー ページを非常に簡単に作成する場合に役立ちます。

于 2012-10-08T22:55:37.273 に答える