Учебное пособие (1075724), страница 34
Текст из файла (страница 34)
5.21. Результат выполнения примера 5.3. Файл «switch_prev_next.xhtml».5.7.14 Элемент repeatПозволяет обрабатывать повторяющиеся данные, является аналогом цикла.Основным атрибутом является атрибут «nodeset=XPath-выражение», которыйпозволяет указать повторяющиеся элементы данных.Атрибуты «startindex = номер первого отображаемого элемента (поумолчанию 1)» и «number = количество отображаемых элементов» позволяютотображать фрагмент множества данных. Поддерживаются не всеми XFormsпроцессорами.Пример 5.3. Файл «repeat_simple_1.xhtml».<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml"xmlns:xforms="http://www.w3.org/2002/xforms"xmlns:ev="http://www.w3.org/2001/xml-events" ><head><title>Пример элемента repeat</title><!-- Пустой префикс пространства имен обязателен для корневогоэлемента xforms:instance --><xforms:model><xforms:instance><example xmlns=""><item>1</item>322<item>2</item><item>3</item><item>4</item><item>5</item></example></xforms:instance></xforms:model></head><body><xforms:repeat nodeset="item">ОсуществляетсяпереборвсехXML-элементов«item»,полеввода«xforms:input» отображается для каждого XML-элемента «item».<xforms:input ref="."><xforms:label>Введите текст:</xforms:label></xforms:input></xforms:repeat></body></html>Результат выполнения примера:Рис.
5.22. Результат выполнения примера 5.3. Файл «repeat_simple_1.xhtml».323На элемент «repeat» оказывает влияние атрибут «appearance».Пример 5.3. Файл «repeat_simple_2.xhtml».<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml"xmlns:xforms="http://www.w3.org/2002/xforms"xmlns:ev="http://www.w3.org/2001/xml-events" ><head><title>Пример элемента repeat и атрибута appearance</title><!-- Пустой префикс пространства имен обязателен для корневогоэлемента xforms:instance --><xforms:model><xforms:instance><example xmlns=""><item><text>текст 1</text><int>1</int></item><item><text>текст 2</text><int>2</int></item><item><text>текст 3</text><int>3</int></item></example></xforms:instance><xforms:bind nodeset="int" type="xforms:integer"/></xforms:model></head>324<body><h1>repeat (appearance="full")</h1><xforms:repeat nodeset="item" appearance="full"><xforms:input ref="text"><xforms:label>Введите текст:</xforms:label></xforms:input><xforms:input ref="int"><xforms:label>Введите число:</xforms:label></xforms:input></xforms:repeat><h1>repeat (appearance="compact")</h1><xforms:repeat nodeset="item" appearance="compact"><xforms:input ref="text"><xforms:label>Введите текст:</xforms:label></xforms:input><xforms:input ref="int"><xforms:label>Введите число:</xforms:label></xforms:input></xforms:repeat><h1>repeat (appearance="minimal")</h1><xforms:repeat nodeset="item" appearance="minimal"><xforms:input ref="text"><xforms:label>Введите текст:</xforms:label></xforms:input><xforms:input ref="int"><xforms:label>Введите число:</xforms:label></xforms:input></xforms:repeat></body></html>Результат выполнения примера:325Рис.
5.23. Результат выполнения примера 5.3. Файл «repeat_simple_2.xhtml».В следующем примере внутри элемента «xforms:repeat» используютсяэлементы «xforms:switch».Может показаться, что значения атрибутов id элементов «xforms:switch»перестаютбытьуникальными(таккак«xforms:switch»повторяетсяв«xforms:repeat»), но в этом случае элементы «xforms:switch» работают корректно.Пример 5.3. Файл «repeat_switch.xhtml».<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml"xmlns:xforms="http://www.w3.org/2002/xforms"xmlns:ev="http://www.w3.org/2001/xml-events" ><head><title>Пример элементов repeat и switch</title><!-- Пустой префикс пространства имен обязателен для корневогоэлемента xforms:instance -->326<xforms:model id="result_model"><xforms:instance><example xmlns=""><result>val1</result><num>3</num></example></xforms:instance></xforms:model><xforms:model id="list_data"><xforms:instance><example xmlns=""><item><text>Значение 1</text></item><item><text>Значение 2</text></item><item><text>Значение 3</text></item></example></xforms:instance></xforms:model></head><body><xforms:repeat model="list_data" nodeset="item"><!-- Кнопки для переключения --><xforms:group appearance="minimal"><xforms:trigger><xforms:label>full</xforms:label><xforms:toggle ev:event="DOMActivate" case="select_1"/></xforms:trigger>327<xforms:trigger><xforms:label>compact</xforms:label><xforms:toggle ev:event="DOMActivate" case="select_2"/></xforms:trigger><xforms:trigger><xforms:label>minimal</xforms:label><xforms:toggle ev:event="DOMActivate" case="select_3"/></xforms:trigger></xforms:group><!-- В случае повторяющихся переключателей каждыйпереключатель работает независимо от других --><xforms:switch><xforms:case id="select_1" selected="true"><xforms:output model="list_data" value="text"/><xforms:trigger appearance="full"><xforms:label model="list_data" ref="text"/></xforms:trigger></xforms:case><xforms:case id="select_2"><xforms:output model="list_data" value="text"/><xforms:trigger appearance="compact"><xforms:label model="list_data" ref="text"/></xforms:trigger></xforms:case><xforms:case id="select_3"><xforms:output model="list_data" value="text"/><xforms:trigger appearance="minimal"><xforms:label model="list_data" ref="text"/></xforms:trigger></xforms:case></xforms:switch></xforms:repeat>328</body></html>Результат выполнения примера:Рис.
5.24. Результат выполнения примера 5.3. Файл «repeat_switch.xhtml».Элементы «xforms:repeat» могут быть вложенными.Пример 5.3. Файл «repeat_nested.xhtml».<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml"xmlns:xforms="http://www.w3.org/2002/xforms"xmlns:ev="http://www.w3.org/2001/xml-events" ><head><title>Пример вложенных циклов repeat</title><xforms:model><xforms:instance><example xmlns=""><item label="Группа 1"><text>Значение 11</text><text>Значение 12</text><text>Значение 13</text></item><item label="Группа 2">329<text>Значение 21</text><text>Значение 21</text></item><item label="Группа 3"><text>Значение 3</text></item></example></xforms:instance></xforms:model></head><body><!-- Внешний цикл перебирает элементы item и генерирует группы--><xforms:repeat nodeset="item"><xforms:group appearance="minimal"><xforms:label ref="@label"/><!-- Вложенный цикл перебирает элементы text и генерирует поля ввода--><xforms:repeat nodeset="text"><xforms:input ref="."><xforms:label>Введите текст:</xforms:label></xforms:input></xforms:repeat></xforms:group></xforms:repeat></body></html>Результат выполнения примера:330Рис.
5.25. Результат выполнения примера 5.3. Файл «repeat_nested.xhtml».Элемент «xforms:repeat» с вложенными элементами «xforms:group» позволяетреализовать ветвление на основе данных формы.Пример 5.3. Файл «repeat_variant.xhtml».<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml"xmlns:xforms="http://www.w3.org/2002/xforms"xmlns:ev="http://www.w3.org/2001/xml-events" ><head><title>Использование repeat с несколькими group</title><xforms:model><xforms:instance><example xmlns=""><item123 type="type3"><date/><datetime/></item123><item123 type="type2"><text>type2</text><int>333</int>331</item123><item type="type1"><text>type1</text><int>333</int></item></example></xforms:instance><xforms:bind nodeset="*/int" type="xforms:integer"/><xforms:bind nodeset="*/date" type="xforms:date"/><xforms:bind nodeset="*/datetime" type="xforms:dateTime"/></xforms:model></head><body><!-- Перебор всех элементов модели на 1 глубине вложенности, уэлементов могут быть различные названия --><xforms:repeat nodeset="*"><!-- Группа соответствует конкретному перебираемому элементу,как найти нужный элемент? В атрибуте ref можно проверять егоназвание, вложенные элементы, атрибуты.
Внутри группы находятсяэлементы формы, специфичные для данного случая. Порядок следованиягрупп не важен, группы будут идти в соответствии с тем порядкомэлементов в модели. --><xforms:group ref=".[@type='type1' and name()='item']"><xforms:label ref="@type"/><xforms:input ref="text"><xforms:label>Введите текст:</xforms:label></xforms:input><xforms:input ref="int"><xforms:label>Введите число:</xforms:label></xforms:input>332</xforms:group><!-- проверка того, что в текущий элемент вложены атрибутtype='type2' и элементы text и int --><xforms:group ref=".[@type='type2' and text and int]"><xforms:label ref="@type"/><xforms:input ref="text"><xforms:label>Введите текст:</xforms:label></xforms:input><xforms:input ref="int"><xforms:label>Введите число:</xforms:label></xforms:input><xforms:output ref="int"><xforms:label>Число:</xforms:label></xforms:output></xforms:group><xforms:group ref=".[@type='type3']"><xforms:label ref="@type"/><xforms:input ref="date"><xforms:label>Введите дату:</xforms:label></xforms:input><xforms:input ref="datetime"><xforms:label>Введите дату и время:</xforms:label></xforms:input></xforms:group></xforms:repeat></body></html>Результат выполнения примера:333Рис.














