Validation 在Orbeon表单中提交失败时显示验证错误

Validation 在Orbeon表单中提交失败时显示验证错误,validation,submit,orbeon,xforms,Validation,Submit,Orbeon,Xforms,我正在打开xform页面,直接提交表单,而不访问表单字段。 如果表单有验证错误,那么它不会提交数据,但默认情况下也不会显示验证错误。 当发生“xforms提交错误”事件时,我将显示一个模式对话框 验证错误由错误摘要组件控制: 从它的文档中,我们可以看到“…错误摘要组件…跟踪访问的控件,并仅为访问的控件显示错误,同时跟踪所有错误…” 这是真的!:-) 因此,如果用户试图提交表单,而没有“访问”任何表单字段,如果存在任何验证错误,我希望列出验证错误 我在各种orbeon相关网站/代码示例/论坛中发现

我正在打开xform页面,直接提交表单,而不访问表单字段。 如果表单有验证错误,那么它不会提交数据,但默认情况下也不会显示验证错误。 当发生“xforms提交错误”事件时,我将显示一个模式对话框

验证错误由错误摘要组件控制: 从它的文档中,我们可以看到“…错误摘要组件…跟踪访问的控件,并仅为访问的控件显示错误,同时跟踪所有错误…” 这是真的!:-)

因此,如果用户试图提交表单,而没有“访问”任何表单字段,如果存在任何验证错误,我希望列出验证错误

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

所以我试过这样的方法,但没有成功

...
   
    <xf:submission id="submit" ...
        ...
        <xf:action ev:event="xforms-submit-error">
            <xf:message level="modal">Oooops!</xf:message>
            <!-- virtual visit all form fields? -->
            <xf:dispatch name="fr-visit-all" targetid="error-summary"/>
            <xf:refresh/>
            <xf:dispatch name="fr-update" targetid="error-summary"/>
        </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>
    
    ...
。。。
解决了

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

我们应该使用“fr error summary model”作为targetid属性值,而不是“error summary”,以访问内置的“error summary组件”

(检查)

示例工作代码:

。。。
window.parent.closeIframe();
...
...
...

我检查了表单运行程序,表单运行程序确实分派了
fr访问所有
。这会导致错误摘要也使用
操作将所有控件标记为已访问。所以我不知道为什么这在你的情况下不起作用。在提交之前,您是否可以尝试
fr访问所有
?targetid应该是“错误摘要”、“fr错误摘要模型”或其他内容?
    ...
    <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>
    ...