Orbeon:如何显示文件系统资源中的动态下拉列表值

时间:2018-07-09 08:11:12

标签: forms dynamic drop-down-menu dropdown orbeon

我是Orbeon的新手,正在尝试实现动态下拉菜单,其中从文件系统上的查找xml填充值。

所以这是要求: 第一个下拉菜单(动物)将有2个值:猫和狗。根据选择,第二个下拉列表(品种)将显示品种列表。

包含品种的2个xml文件被注册为资源,如下所示:

CAT:\ forms \ quote \ lookup \ catbreeds.xml

<?xml version="1.0" encoding="UTF-8"?>
<breeds>
    <item>
        <value>C1</value>
        <label>Domestic Long Hair</label>
    </item>
    <item>
        <value>C2</value>
        <label>Domestic Medium Hair</label>
    </item>
    <item>
        <value>C3</value>
        <label>Domestic Short Hair</label>
    </item>
    <item>
        <value>C4</value>
        <label>Mixed Breed</label>
    </item>
    <item>
        <value>C5</value>
        <label>Tabby</label>
    </item>
    <item>
        <value>C6</value>
        <label>Abyssinian</label>
    </item>
    <item>
        <value>C7</value>
        <label>American Bobtail</label>
    </item>
</breeds>

狗:\ forms \ quote \ lookup \ dogbreeds.xml

<?xml version="1.0" encoding="UTF-8"?>
<breeds>
    <item>
        <value>D1</value>
        <label>Cavapoo</label>
    </item>
    <item>
        <value>D2</value>
        <label>Cockapoo</label>
    </item>
    <item>
        <value>D3</value>
        <label>Crossbreed</label>
    </item>
    <item>
        <value>D4</value>
        <label>Goldendoodle</label>
    </item>
    <item>
        <value>D5</value>
        <label>Labradoodle</label>
    </item>
    <item>
        <value>D6</value>
        <label>Maltipoo</label>
    </item>
    <item>
        <value>D7</value>
        <label>Mi Ki</label>
    </item>
</breeds>

form.xml看起来像这样:

型号:

<xf:instance id="fr-form-instance" xxf:exclude-result-prefixes="#all">
<form>
    <section-1>
        <animal/>
        <breed/>
    </section-1>
</form>
</xf:instance>
<xf:instance id="pets"
    xmlns="">
    <root>
        <item name="Cat" value="cat"/>
        <item name="Dog" value="dog"/>
    </root>
</xf:instance>

身体:

<xh:body>
<fr:view>
    <fr:body
        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 id="section-1-control" class="no-header-section" bind="section-1-bind">
            <fr:grid>
                <xh:tr>
                    <xh:td>
                        <fr:dropdown-select1 id="animal-control" ref="animal" bind="breed-bind">
                            <xf:label ref="$form-resources/animal/label"/>
                            <xf:itemset ref="instance('pets')/item">
                                <xf:label ref="@name"/>
                                <xf:value ref="@value"/>
                            </xf:itemset>
                        </fr:dropdown-select1>
                    </xh:td>
                </xh:tr>
                <xh:tr>
                    <xh:td>
                        <fr:dropdown-select1 id="breed-control" bind="breed-bind">
                            <xf:label ref="$form-resources/breed/label"/>
                            <xf:itemset
                                        ref="doc('oxf:/forms/quote/lookup/catbreeds.xml')/breeds/item">
                                <xf:label ref="label"/>
                                <xf:value ref="value"/>
                            </xf:itemset>
                        </fr:dropdown-select1>
                    </xh:td>
                </xh:tr>
            </fr:grid>
        </fr:section>
    </fr:body>
</fr:view>
</xh:body>

现在,问题所在就是ref =“ doc('oxf:/ forms / quote / lookup / catbreeds .xml')/ breeds / item”>中的“ ref”属性。我能够加载单个列表(在这种情况下,它加载的是Cat品种),但是我找不到找到使其成为条件列表的方法。

我发现我无法使用XPath进行引用(例如:oxf:/ forms / quote / lookup / { animal } breeds.xml)来使值动态化。

我一直在尝试很多事情,但是没有任何效果。如果有人可以给我指示,那将是很大的帮助。 我正在使用Orbeon 4.8

1 个答案:

答案 0 :(得分:0)

由于ref的值为XPath,因此可以通过执行以下操作来动态构建传递给doc()的URL:

doc(concat(
    'oxf:/forms/quote/lookup/',
    instance('fr-form-instance')/section-1/animal,
    'breeds.xml'
))/breeds/item