Search code examples
orbeonxforms

Accessing Orbeon's second xforms instance


Following Orbeon documentation about running xforms-with-java-applications, I deployed Orbeon's war file separately beside my java war on JBoss.

I tried creating 2 instances inside one model

<xforms:model id="fr-form-model">


  <xforms:instance id="don-instance1">
    <don>
     <laptop>                   
 </laptop>
    </don>
  </xforms:instance> 

  <xforms:instance id="don-instance2">
    <don2>
       <laptop2>                    
   </laptop2>
    </don2>
  </xforms:instance>

</xforms:model id="fr-form-model">

I can't seem to access the second xforms instance from the

<xforms:input ref="instance('don-instance')/don/laptop2">
   <xforms:label>Enter a Name:</xforms:label>   
</xforms:input>

Accessing the first xforms instance is fine, as long as I DON'T use the instance() function

<xforms:input ref="/don/laptop">
   <xforms:label>Enter a Name:</xforms:label>    
</xforms:input>

Somehow the instance() method isn't working as I expect, What am I missing ?

Revised Complete XML:

    <xhtml:html
            xmlns:xhtml="http://www.w3.org/1999/xhtml"      
            xmlns:xforms="http://www.w3.org/2002/xforms"
            xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
            xmlns:ev="http://www.w3.org/2001/xml-events"
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:fr="http://orbeon.org/oxf/xml/form-runner"
            >

        <xhtml:head>
            <xhtml:title>Simple</xhtml:title>

            <xforms:model >

                <xforms:instance id="don-instance1">
                    <don1>
                        <laptop1>
                        </laptop1>
                    </don1>
                </xforms:instance>

                 <xforms:instance id="don-instance2">
                    <don2>
                        <laptop2>                   
                        </laptop2>
                    </don2>
                </xforms:instance> 

                <xforms:submission id="submit_metadata" action="../processor.jsp" method="post"/>

            </xforms:model>
        </xhtml:head>

        <xhtml:body>


            <xforms:input ref="instance('don-instance1')/don1/laptop1">
                <xforms:label class="composers-label">Laptop1: </xforms:label>                                      
                <xhtml:br />                                        
            </xforms:input>

            <xforms:input ref="instance('don-instance2')/don2/laptop2">
                <xforms:label class="composers-label">Laptop2: </xforms:label>                                      
                <xhtml:br />                                        
            </xforms:input>

            <xhtml:br />
            <xhtml:br />


            <xforms:submit submission="submit_metadata">
                <xforms:label class="composers-label">Submit</xforms:label>
            </xforms:submit>
            <xhtml:br />

            <fr:xforms-inspector/>

        </xhtml:body>
    </xhtml:html>

Solution

  • As per the code, i see that you are not referring the node names properly. If you want to access the laptop node in first instance then your code should be like this:

    <xforms:input ref="instance('don-instance1')/laptop">
       <xforms:label>Enter a Name:</xforms:label>   
    </xforms:input>
    

    Same way, if you want to access the node in second instance, it should be

    <xforms:input ref="instance('don-instance2')/laptop2">
       <xforms:label>Enter a Name:</xforms:label>   
    </xforms:input>