Mirrored inner fr-form-instance not propagating from setvalue

11 views
Skip to first unread message

Marcin Słowikowski

unread,
Apr 29, 2026, 5:45:47 PMApr 29
to Orbeon Forms
Hello dear Orbeon team.
I've placed this message also as github issue (sorry for that, that was before I've noticed this google groups).
I have noticed a bug or maybe this use case is handled different that I understand.
I have simple form (made also on orbeon demo, but replicates also on orbeon 2023) that has two simple sections each with 4 inputs.
Second second come from app/library.
Whenever I catch xxforms-value-changed event and try to modify form model based on that change it works as long as it is not inner section from library.
Confirmed with xforms-inspector, out fr-form-instance is updated whilst inner is not.
From what I understood by reading documentation
https://doc.orbeon.com/xforms/xbl/advanced-topics/extensions#xxbl-mirror-attribute
it should work.
This is my currently published form that shows this error in action:
https://demo.orbeon.com/demo/fr/buh123/nah123/new?form-version=1

Annotation 2026-04-29 141516.png

and here is the xml code for form generating this issue (notice 2 extra xxforms-value-changed listeners at the bottom working on from change on top left control and propagating value to the other three):

<xh:html xmlns:xh="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms"
         xmlns:xs="http://www.w3.org/2001/XMLSchema"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:ev="http://www.w3.org/2001/xml-events"
         xmlns:xi="http://www.w3.org/2001/XInclude"
         xmlns:xxi="http://orbeon.org/oxf/xml/xinclude"
         xmlns:xxf="http://orbeon.org/oxf/xml/xforms"
         xmlns:map="http://www.w3.org/2005/xpath-functions/map"
         xmlns:array="http://www.w3.org/2005/xpath-functions/array"
         xmlns:math="http://www.w3.org/2005/xpath-functions/math"
         xmlns:exf="http://www.exforms.org/exf/1-0"
         xmlns:fr="http://orbeon.org/oxf/xml/form-runner"
         xmlns:saxon="http://saxon.sf.net/"
         xmlns:sql="http://orbeon.org/oxf/xml/sql"
         xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
         xmlns:fb="http://orbeon.org/oxf/xml/form-builder">
    <xh:head>
        <xf:model xxf:custom-mips="fr:persist" id="fr-form-model" xxf:expose-xpath-types="true"
                  xxf:analysis.calculate="true">

            <!-- Main instance -->
            <xf:instance id="fr-form-instance" xxf:exclude-result-prefixes="#all" xxf:index="id">
                <form>
                    <section-1>
                        <grid-1>
                            <control-1/>
                            <control-2/>
                            <control-3/>
                            <control-4/>
                        </grid-1>

                    </section-1>
                    <section-2>
                        <grid-1 xmlns:xbl="http://www.w3.org/ns/xbl" xmlns:xxbl="http://orbeon.org/oxf/xml/xbl"
                                xmlns:p="http://www.orbeon.com/oxf/pipeline"
                                xmlns:frf="java:org.orbeon.oxf.fr.FormRunner"
                                xmlns:fbf="java:org.orbeon.oxf.fb.FormBuilderXPathApi"
                                xmlns:oxf="http://www.orbeon.com/oxf/processors"
                                xmlns:component="http://orbeon.org/oxf/xml/form-builder/component/buh123/library">
                            <contA/>
                            <contB/>
                            <contC/>
                            <contD/>
                        </grid-1>
                       
                       
                       
                       
                    </section-2>
                </form>
            </xf:instance>

            <!-- Bindings -->
            <xf:bind id="fr-form-binds" ref="instance('fr-form-instance')">
                <xf:bind id="section-1-bind" name="section-1" ref="section-1">
                    <xf:bind id="grid-1-bind" ref="grid-1" name="grid-1">
                        <xf:bind id="control-1-bind" ref="control-1" name="control-1" xxf:whitespace="trim"/>
                        <xf:bind id="control-2-bind" ref="control-2" name="control-2" xxf:whitespace="trim"/>
                        <xf:bind id="control-3-bind" ref="control-3" name="control-3" xxf:whitespace="trim"/>
                        <xf:bind id="control-4-bind" ref="control-4" name="control-4" xxf:whitespace="trim"/>
                    </xf:bind>

                </xf:bind>
                <xf:bind id="section-2-bind" ref="section-2" name="section-2"/>
            </xf:bind>

            <!-- Metadata -->
            <xf:instance id="fr-form-metadata" xxf:readonly="true" xxf:exclude-result-prefixes="#all">
                <metadata>
                    <application-name>buh123</application-name>
                    <form-name>nah123</form-name>
                    <title xml:lang="en">testing</title>
                    <description xml:lang="en"/>
                    <grid-tab-order>default</grid-tab-order>
                    <library-versions>
                        <_>1</_>
                        <orbeon>1</orbeon>
                        <app>1</app>
                    </library-versions>
                    <created-with-version>2025.1.1.202604250538 PE</created-with-version>
                    <updated-with-version>2025.1.1.202604250538 PE</updated-with-version>
                   
                   
                   
                   
                    <email>
                        <templates>
                            <template name="default">
                                <headers/>
                                <exclude-from-all-control-values/>
                            </template>
                        </templates>
                        <parameters/>
                    </email>
                </metadata>
            </xf:instance>

            <!-- Attachments -->
            <xf:instance id="fr-form-attachments" xxf:exclude-result-prefixes="#all">
                <attachments/>
            </xf:instance>

            <!-- All form resources -->
            <xf:instance xxf:readonly="true" id="fr-form-resources" xxf:exclude-result-prefixes="#all">
                <resources>
                    <resource xml:lang="en">
                        <control-1>
                            <label/>
                            <hint/>
                        </control-1>
                        <control-2>
                            <label/>
                            <hint/>
                        </control-2>
                        <control-3>
                            <label/>
                            <hint/>
                        </control-3>
                        <control-4>
                            <label/>
                            <hint/>
                        </control-4>
                        <section-1>
                            <label/>
                        </section-1>
                        <section-2>
                            <label>testing123</label>
                            <help/>
                        </section-2>

                    </resource>
                </resources>
            </xf:instance>

        </xf:model>
    </xh:head>
    <xh:body>
        <fr:view>
            <fr:body xmlns:xbl="http://www.w3.org/ns/xbl" xmlns:p="http://www.orbeon.com/oxf/pipeline"
                     xmlns:oxf="http://www.orbeon.com/oxf/processors">
                <fr:section id="section-1-section" bind="section-1-bind">
                    <fr:grid id="grid-1-grid" bind="grid-1-bind">
                        <fr:c y="1" x="1" w="6">
                            <xf:input xmlns="http://orbeon.org/oxf/xml/form-builder" id="control-1-control"
                                      bind="control-1-bind">
                                <xf:label ref="$form-resources/control-1/label"/>
                                <xf:hint ref="$form-resources/control-1/hint"/>
                       
                                <xf:alert ref="$fr-resources/detail/labels/alert"/>
                            </xf:input>

                            </fr:c>
                        <fr:c y="1" x="7" w="6">
                            <xf:input xmlns="http://orbeon.org/oxf/xml/form-builder" id="control-2-control"
                                      bind="control-2-bind">
                                <xf:label ref="$form-resources/control-2/label"/>
                                <xf:hint ref="$form-resources/control-2/hint"/>
                       
                                <xf:alert ref="$fr-resources/detail/labels/alert"/>
                            </xf:input>
                        </fr:c>
                        <fr:c x="1" y="2" w="6">
                            <xf:input xmlns="http://orbeon.org/oxf/xml/form-builder" id="control-3-control"
                                      bind="control-3-bind">
                                <xf:label ref="$form-resources/control-3/label"/>
                                <xf:hint ref="$form-resources/control-3/hint"/>
                       
                                <xf:alert ref="$fr-resources/detail/labels/alert"/>
                            </xf:input>
                        </fr:c>
                        <fr:c x="7" y="2" w="6">
                            <xf:input xmlns="http://orbeon.org/oxf/xml/form-builder" id="control-4-control"
                                      bind="control-4-bind">
                                <xf:label ref="$form-resources/control-4/label"/>
                                <xf:hint ref="$form-resources/control-4/hint"/>
                       
                                <xf:alert ref="$fr-resources/detail/labels/alert"/>
                            </xf:input>
                        </fr:c>
                    </fr:grid>
                </fr:section>
                <fr:section id="section-2-section" bind="section-2-bind">
                    <xf:label ref="$form-resources/section-2/label"/>
                    <component:section-1 xmlns:component="http://orbeon.org/oxf/xml/form-builder/component/buh123/library"
                                         xmlns="http://orbeon.org/oxf/xml/form-builder"
                                         xmlns:xxbl="http://orbeon.org/oxf/xml/xbl"
                                         xmlns:fbf="java:org.orbeon.oxf.fb.FormBuilderXPathApi"
                                         xmlns:frf="java:org.orbeon.oxf.fr.FormRunner"
                                         id="section-2-content-control"/>
                </fr:section>
               
                <xf:action ev:observer="fr-form-instance" event="xxforms-value-changed"
                           if="event('node')/name()='control-1'">
                    <xf:setvalue ref="xxf:instance('fr-form-instance')//control-2"
                                 value="xxf:instance('fr-form-instance')//control-1"/>
                    <xf:setvalue ref="xxf:instance('fr-form-instance')//control-3"
                                 value="xxf:instance('fr-form-instance')//control-1"/>
                    <xf:setvalue ref="xxf:instance('fr-form-instance')//control-4"
                                 value="xxf:instance('fr-form-instance')//control-1"/>
                </xf:action>
               
                <xf:action ev:observer="fr-form-instance" event="xxforms-value-changed"
                           if="event('node')/name()='contA'">
                    <xf:setvalue ref="xxf:instance('fr-form-instance')//contB"
                                 value="xxf:instance('fr-form-instance')//contA"/>
                    <xf:setvalue ref="xxf:instance('fr-form-instance')//contC"
                                 value="xxf:instance('fr-form-instance')//contA"/>
                    <xf:setvalue ref="xxf:instance('fr-form-instance')//contD"
                                 value="xxf:instance('fr-form-instance')//contA"/>
                </xf:action>
               
                <fr:xforms-inspector/>
            </fr:body>
        </fr:view>
    </xh:body>
</xh:html>

Alessandro Vernet

unread,
Apr 29, 2026, 8:00:53 PMApr 29
to orb...@googlegroups.com
Hi Marcin,

We fixed this issue, and the fix will be in the 2025.1.2 and 2024.1.6 maintenance releases. Thanks for the detailed description!

-Alex

--
You received this message because you are subscribed to the Google Groups "Orbeon Forms" group.
To unsubscribe from this group and stop receiving emails from it, send an email to orbeon+un...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/orbeon/64fbe8b5-767d-4ae2-a548-3ee74285a914n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages