Orbeon 2018.1 fr-error-summary渲染问题

时间:2018-09-12 00:29:32

标签: orbeon

当您尝试呈现全局错误时,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:label为<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>

1 个答案:

答案 0 :(得分:0)

在进一步挖掘之后,发现解决此错误的最简单方法是从表单中删除此部分:

<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。之间打破。