2013-10-11 3 views
1

Я пытаюсь создать форму с вложенными повторами, которая выполняется на сервере Orbeon. Идея состоит в том, чтобы иметь некоторые элементы, которые можно повторить, и другие элементы внутри первого, которые также могут быть повторены. то есть блок для вставки личной информации (для нескольких человек в повторе), и для каждого человека мы можем добавить несколько телефонных номеров (также повторить).Вложенные повторы Orbeon Xforms

Я не нашел столько информации о том, как это сделать, и я полагаю, что я могу создать это: Other StackOverflow question (но этот пример также не работает для меня, даже с исправлениями, представленными в комментариях).

Для тестирования я создал следующий вид:

<xh:html xmlns:ev="http://www.w3.org/2001/xml-events" 
xmlns:exf="http://www.exforms.org/exf/1-0" 
xmlns:fb="http://orbeon.org/oxf/xml/form-builder" 
xmlns:fr="http://orbeon.org/oxf/xml/form-runner" 
xmlns:odt="http://orbeon.org/oxf/xml/datatypes" 
xmlns:oxf="http://www.orbeon.com/oxf/processors" 
xmlns:p="http://www.orbeon.com/oxf/pipeline" 
xmlns:saxon="http://saxon.sf.net/" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:sql="http://orbeon.org/oxf/xml/sql" 
xmlns:xf="http://www.w3.org/2002/xforms" 
xmlns:xh="http://www.w3.org/1999/xhtml" 
xmlns:xi="http://www.w3.org/2001/XInclude" 
xmlns:xpl="java:org.orbeon.oxf.pipeline.api.FunctionLibrary" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xxf="http://orbeon.org/oxf/xml/xforms" xmlns:xxi="http://orbeon.org/oxf/xml/xinclude"> 
<xh:head> 
    <xh:title>LoopInLoop</xh:title> 
    <xf:model id="fr-form-model" xxf:expose-xpath-types="true"> 
     <xf:instance id="fr-form-metadata" xxf:readonly="true"> 
      <metadata> 
       <application-name>DHszw</application-name> 
       <form-name>LoopInLoop</form-name> 
       <title xml:lang="en">LoopInLoop</title> 
       <description xml:lang="en">Description of the form.</description> 
      </metadata> 
     </xf:instance> 
     <xf:instance id="fr-form-instance"> 
      <form> 
       <category-1> 
        <subcategory-1-1/> 
        <loop-group-0> 
         <loop-0> 
          <loop-group-0-0> 
           <loop-0-0> 
           <element-1-1-1/> 
           <element-1-1-2/> 
           </loop-0-0> 
          </loop-group-0-0> 
          <element-1-1-3/> 
          <element-1-1-4/> 
         </loop-0> 
        </loop-group-0> 
        <element-1-1-5/> 
       </category-1> 
      </form> 
     </xf:instance> 
     <xf:bind id="fr-form-binds" 
      ref="instance('fr-form-instance')" xmlns:dataModel="java:org.orbeon.oxf.fb.DataModel"> 
      <xf:bind id="category-1-bind" name="category-1" ref="category-1"> 
       <xf:bind id="subcategory-1-1-bind" 
        name="subcategory-1-1" ref="subcategory-1-1"/> 
       <xf:bind id="group-loop-0-bind" 
        name="group-loop-0-bind" ref="loop-group-0"> 
        <xf:bind id="loop-0-bind" name="loop-0" ref="loop-0"> 
         <xf:bind id="group-loop-0-0-bind" 
          name="group-loop-0-0-bind" ref="loop-group-0-0"> 
          <xf:bind id="loop-0-0-bind" 
           name="loop-0-0" ref="loop-0-0"> 
           <xf:bind id="element-1-1-1-bind" 
           name="element-1-1-1" ref="element-1-1-1"/> 
           <xf:bind id="element-1-1-2-bind" 
           name="element-1-1-2" ref="element-1-1-2"/> 
          </xf:bind> 
         </xf:bind> 
         <xf:bind id="element-1-1-3-bind" 
          name="element-1-1-3" ref="element-1-1-3" relevant="(../$element-1-1-2='no')"/> 
         <xf:bind id="element-1-1-4-bind" 
          name="element-1-1-4" ref="element-1-1-4" relevant="(../$element-1-1-2='no')"/> 
        </xf:bind> 
       </xf:bind> 
       <xf:bind id="element-1-1-5-bind" 
        name="element-1-1-5" ref="element-1-1-5" relevant="($element-1-1-4='no')"/> 
      </xf:bind> 
     </xf:bind> 
     <xf:instance id="fr-form-attachments"> 
      <attachments> 
       <css filename="" mediatype="text/css" size=""/> 
       <pdf filename="" mediatype="application/pdf" size=""/> 
      </attachments> 
     </xf:instance> 
     <xf:instance id="fr-form-resources" xxf:readonly="false"> 
      <resources> 
       <resource xml:lang="en"> 
        <category-1> 
         <label><![CDATA[new category]]></label> 
        </category-1> 
        <subcategory-1-1> 
         <label><![CDATA[<b>new sub-category</b><hr>]]></label> 
         <hint/> 
         <alert><![CDATA[]]></alert> 
        </subcategory-1-1> 
        <element-1-1-1> 
         <label><![CDATA[Add something]]></label> 
         <hint><![CDATA[]]></hint> 
         <alert/> 
        </element-1-1-1> 
        <element-1-1-2> 
         <label><![CDATA[More Loops?]]></label> 
         <hint><![CDATA[]]></hint> 
         <alert/> 
         <item> 
          <label><![CDATA[yes]]></label> 
          <value><![CDATA[yes]]></value> 
         </item> 
         <item> 
          <label><![CDATA[no]]></label> 
          <value><![CDATA[no]]></value> 
         </item> 
        </element-1-1-2> 
        <element-1-1-3> 
         <label><![CDATA[AddOtherThing]]></label> 
         <hint><![CDATA[]]></hint> 
         <alert/> 
        </element-1-1-3> 
        <element-1-1-4> 
         <label><![CDATA[MorewLoop2]]></label> 
         <hint><![CDATA[]]></hint> 
         <alert/> 
         <item> 
          <label><![CDATA[yes]]></label> 
          <value><![CDATA[yes]]></value> 
         </item> 
         <item> 
          <label><![CDATA[no]]></label> 
          <value><![CDATA[no]]></value> 
         </item> 
        </element-1-1-4> 
        <element-1-1-5> 
         <label><![CDATA[group.End]]></label> 
         <hint><![CDATA[]]></hint> 
         <alert/> 
        </element-1-1-5> 
       </resource> 
      </resources> 
     </xf:instance> 
     <xf:instance id="fr-service-request-instance" xxf:exclude-result-prefixes="#all"> 
      <response/> 
     </xf:instance> 
     <xf:instance id="loop-0-template" xxf:readonly="true"> 
      <loop-0> 
       <element-1-1-1/> 
       <element-1-1-2/> 
       <loop-0-0/>      
      </loop-0> 
     </xf:instance> 
     <xf:instance id="loop-0-0-template" xxf:readonly="true"> 
      <loop-0-0> 
       <element-1-1-3/> 
       <element-1-1-4/> 
      </loop-0-0> 
     </xf:instance> 
    </xf:model> 
</xh:head> 
<xh:body> 
    <fr:view> 
     <fr:body xmlns:dataModel="java:org.orbeon.oxf.fb.DataModel" 
      xmlns:oxf="http://www.orbeon.com/oxf/processors" 
      xmlns:p="http://www.orbeon.com/oxf/pipeline" xmlns:xbl="http://www.w3.org/ns/xbl"> 
      <fr:section bind="category-1-bind" id="category-1-control"> 
       <xf:label ref="$form-resources/category-1/label"/> 
       <xh:tr> 
        <xh:td> 
         <xf:output bind="subcategory-1-1-bind" id="subcategory-1-1-control"> 
          <xf:label mediatype="text/html" ref="$form-resources/subcategory-1-1/label"/> 
          <xf:hint ref="$form-resources/subcategory-1-1/hint"/> 
          <xf:alert ref="$fr-resources/detail/labels/alert"/> 
         </xf:output> 
        </xh:td> 
       </xh:tr> 
       <xf:group bind="group-loop-0-bind" id="group-loop-0-control"> 
        <fr:grid bind="loop-0-bind" id="loop-0-control" 
         max="10" min="1" 
         origin="instance('loop-0-template')" repeat="true"> 
         <xf:group bind="group-loop-0-0-bind" id="group-loop-0-0-control"> 
          <fr:grid bind="loop-0-0-bind" 
           id="loop-0-0-control" max="10" 
           min="1" 
           origin="instance('loop-0-0-template')" repeat="true"> 
           <xh:tr> 
           <xh:td> 
           <xf:input 
           bind="element-1-1-1-bind" id="element-1-1-1-control"> 
           <xf:label ref="$form-resources/element-1-1-1/label"/> 
           <xf:hint ref="$form-resources/element-1-1-1/hint"/> 
           <xf:alert ref="$fr-resources/detail/labels/alert"/> 
           </xf:input> 
           </xh:td> 
           </xh:tr> 
           <xh:tr> 
           <xh:td> 
           <xf:select1 
           appearance="full" 
           bind="element-1-1-2-bind" id="element-1-1-2-control"> 
           <xf:label ref="$form-resources/element-1-1-2/label"/> 
           <xf:hint ref="$form-resources/element-1-1-2/hint"/> 
           <xf:alert ref="$fr-resources/detail/labels/alert"/> 
           <xf:itemset ref="$form-resources/element-1-1-2/item"> 
           <xf:label ref="label"/> 
           <xf:value ref="value"/> 
           </xf:itemset> 
           </xf:select1> 
           </xh:td> 
           </xh:tr> 
          </fr:grid> 
         </xf:group> 
         <xh:tr> 
          <xh:td> 
           <xf:input bind="element-1-1-3-bind" id="element-1-1-3-control"> 
           <xf:label ref="$form-resources/element-1-1-3/label"/> 
           <xf:hint ref="$form-resources/element-1-1-3/hint"/> 
           <xf:alert ref="$fr-resources/detail/labels/alert"/> 
           </xf:input> 
          </xh:td> 
         </xh:tr> 
         <xh:tr> 
          <xh:td> 
           <xf:select1 appearance="full" 
           bind="element-1-1-4-bind" id="element-1-1-4-control"> 
           <xf:label ref="$form-resources/element-1-1-4/label"/> 
           <xf:hint ref="$form-resources/element-1-1-4/hint"/> 
           <xf:alert ref="$fr-resources/detail/labels/alert"/> 
           <xf:itemset ref="$form-resources/element-1-1-4/item"> 
           <xf:label ref="label"/> 
           <xf:value ref="value"/> 
           </xf:itemset> 
           </xf:select1> 
          </xh:td> 
         </xh:tr> 
        </fr:grid> 
       </xf:group> 
       <fr:grid> 
        <xh:tr> 
         <xh:td> 
          <xf:output bind="element-1-1-5-bind" id="element-1-1-5-control"> 
           <xf:label ref="$form-resources/element-1-1-5/label"/> 
           <xf:hint ref="$form-resources/element-1-1-5/hint"/> 
           <xf:alert ref="$fr-resources/detail/labels/alert"/> 
          </xf:output> 
         </xh:td> 
        </xh:tr> 
       </fr:grid> 
      </fr:section> 
     </fr:body> 
    </fr:view> 
</xh:body> 
</xh:html> 

Но только «вложенную повтор» показан и не «внешний» один.

Вопрос: Не реализовано ли оно в Orbeon? Нужен ли ему специальный синтаксис? Или есть какая-то ошибка, которую я не вижу?

Я пользуюсь Orbeon 4.3.0.1.201308150213-CE.

EDITED: Я изменил раздел «Шаблон» петель с некоторыми исправлениями.

+0

Сфера применения приложения заключается в развертывании формы в Орбеоне, которая может использоваться для заполнения информации не только для представления сохраненных данных. – JorgeHortelano

+0

Это для формы, которую вы создали в Form Builder? На данный момент Form Builder не поддерживает вложенные повторы, поэтому, если вам действительно нужны вложенные повторы, вам нужно написать форму вручную. Обратите внимание, что в ближайшем будущем мы рассмотрим поддержку повторяющихся разделов, которые должны обрабатывать такие варианты использования, как этот. – avernet

+0

База формы создается Form Builder, но вложенный цикл создается вручную. Я не уверен, что это правильный способ сделать вложенный цикл или нет. – JorgeHortelano

ответ

1

Вложенность <fr:grid> не поддерживается на данном этапе. Но мы планируем скоро реализовать support for nested sections, что должно позволить вам делать то, что вы ищете.

+0

Я буду ждать, пока эта характеристика не будет реализована. Может быть, для Orbeon 4.4? – JorgeHortelano

+0

Это будет после 4,4, может быть, 4.5. – ebruchez

+0

Вложенные разделы, по-видимому, являются подходящей альтернативой для некоторых случаев. – JorgeHortelano

Смежные вопросы