在Orbeon Forms中提交失败时显示验证错误

时间:2016-03-31 17:49:13

标签: validation submit orbeon xforms

我正在打开xform页面,直接提交表单,无需访问表单字段。 如果表单有验证错误,那么它不会提交数据,但它不会在默认Error Summary Component中显示验证错误。 当事件“xforms-submit-error”发生时,我会显示一个模态对话框。

验证错误由错误摘要组件控制: 从它的文档中,我们看到“...错误摘要组件......跟踪访问过的控件,并且只显示访问过程中的错误,同时跟踪所有错误......” 而且这种情况正在发生! : - )

所以我想如果用户试图提交表单,没有“访问”任何表单字段,如果有任何验证错误,列出验证错误。

我在各种orbeon相关网站/代码示例/论坛中发现,为了做到这一点,应该使用“visit-all”操作,这将导致标记所有控件“已访问”,因此他们的相关错误显示!

所以试过这样的事,但没有运气!:

null

如何访问默认“错误摘要”?我没有添加自定义错误摘要,我想使用内置组件。

使用Orbeon Forms 4.5

1 个答案:

答案 0 :(得分:0)

解决!

问题是xf:dispatch事件处理程序的targetid属性。

我们应该使用“fr-error-summary-model”作为目标属性值,而不是“错误摘要”来访问内置的“错误摘要组件”。

(检查components.xslerror-summary.xbl

示例工作代码:

    ...
    <xf:submission id="submit" ...
        ...
        <xf:action ev:event="xforms-submit-error">
            <!--  Listing the errors present on form -->
            <!-- 
                 1. visit-all action, which will result in marking all controls "visited", so their related error shows. 
                 2. to properly update the error summary within a submission response, we need an explicit <xf:refresh> action before dispatching....
                 3. ...fr-update, so that the UI captures all the valid/invalid  states: 
            -->
            <xf:dispatch name="fr-visit-all" targetid="fr-error-summary-model"/>
            <xf:refresh/>
            <xf:dispatch name="fr-update" targetid="fr-error-summary-model"/>
        </xf:action>
        <xf:action ev:event="xforms-submit-done">
            <xxf:script>window.parent.closeIframe();</xxf:script>
        </xf:action>
    </xf:submission>
    ...
    </xf:model>
</xh:head>
<xh:body>
    <fr:view>
    ...
    <xf:trigger id="submit-control" bind="submit-bind">
        <xf:label ref="$form-resources/submit/label" />
        <xf:send ev:event="DOMActivate" submission="submit" />
    </xf:trigger>
    ...