Orbeon表单 - 设置自动填充字段的值并触发验证

时间:2016-05-18 09:58:26

标签: jquery forms validation orbeon

我有一个场景,其中Orbeon表单是从后端通过用户在前一个(非Orbeon)页面上输入的一些值预先填充的。正在预填充的字段实际上是自动填充字段(使用表单生成器创建)。

每个字段的

自动填充建议由我的后端控制器提供。我已经做了一个解决方法,允许用户保留他输入的数据,即使它在原始项目集中不存在。唯一的例外是邮政编码,其中发生了另一个外部验证,并在用户输入的内容与后端项目集不匹配时显示错误。

此外部验证是通过服务实现的,该服务在更改邮政编码字段时调用,该服务使用值隐藏字段(例如 postalCodeValidationResult ) > true / false 我实际上是根据 true / false postalCodeValidationResult 字段检查输入的邮政编码是否有效。

  

E.g。用户在页面A上输入邮政编码,城市和街道,然后输入   到达页面B,这些值必须在匹配时预先填充   在页面B上的Orbeon表格上的字段。由于邮政编码需要是真实的   一,我需要以某种方式触发邮政编码的外部验证   字段(即调用外部服务进行验证)。

我遇到的问题是当用户在页面A上输入错误的邮政编码时,我会在页面B上填充它,并且应该在表单加载时以某种方式触发验证。但是,我无法成功触发验证。我假设我必须触发 xforms-value-changed 事件或类似事件,但这似乎不起作用,或者我遗漏了一些东西。我试过了:

ORBEON.xforms.Document.dispatchEvent(
            {
                targetId:  'address-postal-code-control',
                eventName: 'xforms-value-changed'
            }
        );

还有这个:

var control = ORBEON.jQuery('*[id $= "address-postal-code-control"]');
ORBEON.xforms.Document.dispatchEvent(
            {
                targetId:  control.attr('id'),
                eventName: 'xforms-value-changed'
            }
        );

但没有成功。在测试时,我还尝试手动更改JavaScript中的值(而不是预先填充),但即使这样也行不通 - 是因为它不是常规输入字段,而是自动填充字段?

ORBEON.xforms.Document.setValue(control.attr('id'), "69121");

有人知道如何实现这一目标吗?感谢任何帮助。谢谢。

其他信息(自动填充定义)

<fr:autocomplete xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" xmlns:xxbl=""http://orbeon.org/oxf/xml/xbl"" 
    id=""address-postal-code-control"" labelref=""@label""
    resource=""$config-gev.autosuggest.url.address/autosuggest/zurs?facet=postalCode&amp;postalCode={$fr-search-value}"" 
    bind=""address-postal-code-bind""
    class=""personal-details-input address-postal-code"">
          <xf:label ref=""$form-resources/address-postal-code/label""/>
          <xf:hint ref=""$form-resources/address-postal-code/hint""/>
          <xf:alert ref=""$form-resources/address-postal-code/alert[1]""  validation=""validation-68-validation""/>
          <xf:itemset ref=""/suggestions/suggestion"">
                <xf:label ref=""result""/>
                <xf:value ref=""result""/>
           </xf:itemset>
</fr:autocomplete>

其他信息(验证操作)

<xf:action id=""validatePostalCode-regular-binding"">

            <xf:action ev:event=""xforms-value-changed"" ev:observer=""address-postal-code-control"" if=""true()"">
                <xf:send submission=""validatePostalCode-submission""/>
            </xf:action>

            <xf:action ev:event=""xforms-submit"" ev:observer=""validatePostalCode-submission"">

                <xf:var name=""request-instance-name"" value=""'validatePostalCode-instance'"" as=""xs:string""/>

                <xf:insert ref=""instance('fr-service-request-instance')"" origin=""saxon:parse(instance($request-instance-name))""/> 
                <xf:action context=""instance('fr-service-request-instance')"">
                    <xf:action class=""fr-set-service-value-action"">
                        <xf:var name=""control-name"" value=""'address-postal-code'""/>
                        <xf:var name=""path"" value=""/request/postalCode""/>
                    </xf:action>
                    <!-- Setvalue actions will be here -->
                </xf:action>
            </xf:action>

            <xf:action ev:event=""xforms-submit-done"" ev:observer=""validatePostalCode-submission"" context=""instance('fr-service-response-instance')"">
                <xf:action class=""fr-set-control-value-action"">
                    <xf:var name=""control-name"" value=""'postalCodeValidationResult-regular'""/>
                    <xf:var name=""control-value"" value=""/result/valid""/>
                </xf:action>  
            </xf:action>
</xf:action>

0 个答案:

没有答案