当您尝试呈现全局错误时,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进行的测试之间添加了并行代码
包含的是一个简单的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>
答案 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。之间打破。