我是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
答案 0 :(得分:0)
由于ref
的值为XPath,因此可以通过执行以下操作来动态构建传递给doc()
的URL:
doc(concat(
'oxf:/forms/quote/lookup/',
instance('fr-form-instance')/section-1/animal,
'breeds.xml'
))/breeds/item