Orbeon 2018.1 fr-error-summary渲染问题

问题描述 投票:0回答:1

当您尝试呈现全局错误时,Orbeon 2018.1中的fr-error-summary会出现渲染问题:

<xhtml:table width="100%">
  <xhtml:tr>
    <xhtml:td>
     <fr:error-summary observer="generalTab" id="error-summary">
       <fr:label ref="$resources/please-handle-validation-errors"/>
       <fr:errors nodeset="instance('errors')/error">
         <fr:label ref="label"/>
         <fr:alert ref="alert"/>
       </fr:errors>
     </fr:error-summary>
   </xhtml:td>
 </xhtml:tr>
</xhtml:table>

这导致以下渲染:

<li id="repeat-end-error-summary≡xf-2268" class="xforms-repeat-begin-end"></li>
<span id="error-summary≡xf-2272" class="xforms-group">...</span>
<table width="100%">...</table>

<span>包含所有错误,<table>只包含fr:标签为<legend>

我在Orbeon 3.9上的生产服务器和使用Orbeon 2018.1 Orbeon 2018.1 left and Orbeon 3.9 right的测试之间添加了代码的并排

包含一个简单的xform来重现它。

<xh:html xmlns:xh="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:fr="http://orbeon.org/oxf/xml/form-runner">
    <xh:head>
        <xh:title>orbeon-2018-1-fr-error-summary-rendering-issue</xh:title>
        <xf:model id="repro">
            <xf:instance id="test">
                <test>SUCCESS</test>
            </xf:instance>
            <xf:bind nodeset="instance('test')" constraint=". = 'SUCCESS'"/>
            <xf:action ev:observer="test" ev:event="xxforms-value-changed">
                <xf:setvalue ref="instance('data-safe')">false</xf:setvalue>
                <xf:dispatch name="fr-visit-all" targetid="error-summary"/>
                <xf:refresh/>
                <xf:dispatch name="fr-update" targetid="error-summary"/>
                <xf:dispatch name="fr-visit-all" targetid="error-summary-global"/>
                <xf:refresh/>
                <xf:dispatch name="fr-update" targetid="error-summary-global"/>
            </xf:action>
        </xf:model>
    </xh:head>
    <xh:body>
        <xh:h3>TEST</xh:h3>
        <xf:group model="repro" id="validationArea">
            <xf:input ref="instance('test')" incremental="true">
                <xf:label>Enter any value other than SUCCESS to trigger an alert</xf:label>
                <xf:alert>You SHALL have SUCCESS</xf:alert>
            </xf:input>
        </xf:group>
        <xh:table>
            <xh:tr>
                <xh:td>
                    <fr:error-summary observer="validationArea" id="error-summary">
                        <fr:label>Without global errors</fr:label>
                    </fr:error-summary>
                </xh:td>
            </xh:tr>
        </xh:table>
        <xh:table>
            <xh:tr>
                <xh:td>
                    <fr:error-summary observer="validationArea" id="error-summary-global">
                        <fr:label>With global errors</fr:label>
                        <fr:errors nodeset="instance('errors')/error">
                            <fr:label ref="label"/>
                            <fr:alert ref="alert"/>
                        </fr:errors>
                    </fr:error-summary>
                </xh:td>
            </xh:tr>
        </xh:table>
    </xh:body>
</xh:html>
orbeon
1个回答
0
投票

好的经过一些挖掘后,事实证明绕过这个bug的最简单方法是从表单中删除这部分:

<fr:errors nodeset="instance('errors')/error">
    <fr:label ref="label"/>
    <fr:alert ref="alert"/>
</fr:errors>

删除此部分后,错误摘要呈现为已记录。这意味着特别是global errors渲染被破坏了。

2017.2和2018.1中的行为是相同的,因此它必须在3.9和2017.2之间被打破。

© www.soinside.com 2019 - 2024. All rights reserved.