Как сделать пользовательский элемент управления на основе динамического выпадающего списка данных в Orbeon Form Builder
У меня есть другая проблема. Я хочу создать новый пользовательский элемент управления, почти такой же, как Dynamic Data Dropdown. Разница в том, что пользователь вместо того, чтобы вводить данные управления, выглядит так:
- URL - http://www.example.com/ABCDE
- Предметы - предметы
- Этикетка - этикетка
- Значение - значение
должен пройти только
- Словарь - ABCDE
а остальные URL и другие данные должны быть по умолчанию и запомнены в элементе управления. Таким образом, вместо 4 полей ввода (url, item, label, value) должно быть только 1 (словарь). Я уже понял, как удалить эти поля ввода и добавить то, что я хочу:
Я просто заменил эту часть кода:
<xf:input ref="@resource">
<xf:label lang="en">Resource URL</xf:label>
<xf:label lang="es">URL del Recurso</xf:label>
<xf:label lang="fi">Resurssi URL</xf:label>
<xf:label lang="fr">URL de la ressource</xf:label>
<xf:label lang="ru">URL ресурса</xf:label>
<xf:label lang="it">URL della risorsa</xf:label>
<xf:label lang="de">URL der Ressource</xf:label>
<xf:label lang="sv">Resursens adress</xf:label>
<xf:label lang="nl">Resource URL</xf:label>
<xf:label lang="pt">URL do Recurso</xf:label>
<xf:hint lang="en">HTTP URL returning data used to populate the dropdown</xf:hint>
<xf:hint lang="es">HTTP URL retornando datos para poblar la lista</xf:hint>
<xf:hint lang="fi">HTTP URL palauttaa pudotusvalikon täyttämiseen käytettyä dataa</xf:hint>
<xf:hint lang="fr">URL HTTP auquel réside le service</xf:hint>
<xf:hint lang="ru">HTTP URL сервиса, данными из которого будет заполнен выпадающий список</xf:hint>
<xf:hint lang="it">URL HTTP che da i dati per il menu a tendina</xf:hint>
<xf:hint lang="de">HTTP URL die die Inhalte für das Dropdown-Menü liefert</xf:hint>
<xf:hint lang="sv">Vanligen en Internetadress som börjar med http://</xf:hint>
<xf:hint lang="nl">HTTP URL als bron voor de gegevens in de selectie</xf:hint>
<xf:hint lang="pt">HTTP URL devolvendo dados para preencher a lista de opções</xf:hint>
</xf:input>
<xf:input ref="xf:itemset/@ref">
<xf:label ref="$resources/dialog-actions/items/label"/>
<xf:hint ref="$resources/dialog-actions/items/hint"/>
</xf:input>
<xf:input ref="xf:itemset/xf:label/@ref">
<xf:label ref="$resources/dialog-actions/item-label/label"/>
<xf:hint ref="$resources/dialog-actions/item-label/hint"/>
</xf:input>
<xf:input ref="xf:itemset/xf:value/@ref">
<xf:label ref="$resources/dialog-actions/item-value/label"/>
<xf:hint ref="$resources/dialog-actions/item-value/hint"/>
</xf:input>
с этим:
<xf:input ref="@resource">
<xf:label lang="en">Dictionary</xf:label>
<xf:hint lang="en">Dictionary returning data used to populate the dropdown</xf:hint>
</xf:input>
И теперь я понятия не имею, как хранить значения по умолчанию, которые должны быть запомнены, и как связать их с методами, чтобы он мог извлекать элементы из URL в мой элемент управления раскрывающимся списком. Пожалуйста помоги
1 ответ
Хорошо, я сделал что-то вроде этого:
<xbl:xbl 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:xxf="http://orbeon.org/oxf/xml/xforms"
xmlns:my="http://www.example.com/"
xmlns:saxon="http://saxon.sf.net/"
xmlns:fb="http://orbeon.org/oxf/xml/form-builder"
xmlns:xbl="http://www.w3.org/ns/xbl"
xmlns:xxbl="http://orbeon.org/oxf/xml/xbl">
<metadata xmlns="http://orbeon.org/oxf/xml/form-builder">
<display-name lang="en">Custom Controls</display-name>
</metadata>
<xbl:binding id="my-dictionary-selector" element="my|dictionary-selector" xxbl:mode="lhha binding value">
<fb:metadata>
<fb:display-name lang="en">Dictionary Selector</fb:display-name>
<fb:icon lang="en">
<fb:small-icon>/forms/orbeon/builder/images/dropdown.png</fb:small-icon>
<fb:large-icon>/forms/orbeon/builder/images/dropdown.png</fb:large-icon>
</fb:icon>
<fb:template>
<my:dictionary-selector>
<xf:label ref=""/>
<xf:hint ref=""/>
<xf:help ref=""/>
<xf:alert ref=""/>
<xf:itemset ref="()">
<xf:label ref="()"/>
<xf:value ref="()"/>
</xf:itemset>
</my:dictionary-selector>
</fb:template>
<fb:control-details>
<xf:input ref="@resource" name="aa">
<xf:label lang="en">Dictionary</xf:label>
<xf:hint lang="en">Dictionary name returning data used for the suggestions</xf:hint>
</xf:input>
</fb:control-details>
</fb:metadata>
<xbl:template>
<xf:select1 appearance="minimal" ref="xxf:binding('my-dictionary-selector')">
<xf:item>
<xf:label>[Select...]</xf:label>
<xf:value/>
</xf:item>
<xf:itemset nodeset="doc('http://localhost:8080/OrbeonForm/resources/dictionaries/colors')/collection/dictionary">
<xf:label ref="key"/>
<xf:value ref="value"/>
</xf:itemset>
</xf:select1>
</xbl:template>
</xbl:binding>
</xbl:xbl>
и это работает (принимает значения из заданного XML), но теперь я хочу дать пользователю возможность выбрать имя словаря. Таким образом, в URL к файлу xml ( http://localhost:8080/form/resources/dictionaries/colors) вместо цветов я хочу вставить строку, которую пользователь вставил в словарь, в элементах управления. Как мне этого добиться? Это изменит раскрывающийся список после того, как пользователь нажмет кнопку "применить" в элементах управления?