【问题标题】:How to react to a language change in a dropdown database service如何对下拉数据库服务中的语言更改做出反应
【发布时间】:2016-11-23 12:04:12
【问题描述】:

我有一个带有市政当局下拉选项的表单。
意大利用户看到意大利名字,德国用户看到德国名字。
更改表单的语言很顺利,名称会立即更新。

<resource xml:lang="de">
     <gem>
        <label>Ansuchen an die Gemeinde</label>
        <hint/>
        <item>
            <label>Abtei</label>                        
            <value>6</value>
        </item>
        ...
     </gem>
</resource>  
<resource xml:lang="it">
    <gem>
        <label>Richiesta al Comune di:</label>
        <hint/>
        <item> 
            <label>Aldino</label> 
            <value>1</value> 
        </item>
        ...
     </gem>
</resource>  

<fr:dropdown-select1 xmlns:xxbl="http://orbeon.org/oxf/xml/xbl" id="gem-control" bind="gem-bind">
    <xf:label ref="$form-resources/gem/label"/>
    <xf:hint ref="$form-resources/gem/hint"/>
    <xf:alert ref="$fr-resources/detail/labels/alert"/>
    <xf:itemset ref="$form-resources/gem/item">
        <xf:label ref="label"/>
        <xf:value ref="value"/>
    </xf:itemset>
 </fr:dropdown-select1>

现在我在populating a dropdown 看到了 从数据库加载下拉项目是可行的。
我试过这个并且它起作用了,但实际的解决方案有一个额外的表单控件的小缺陷。

我在数据库中创建了一个包含三个字段gemlanggembeschr 的表。
表格内容示例:

gem    lang   gembeschr  
====== ====== =========    
 1     de     ALDEIN  
 1     it     ALDINO  
 ...  

在数据库服务的 orbeon 中,我使用了以下选择:
SELECT gem, gembeschr FROM tablename where lang=&lt;sql:param type="xs:string" select=""/&gt; order by gembeschr

但在我目前看到的所有示例中,下拉菜单中的更改都会对表单上的控件更改做出反应。
所以在模型中我插入了以下var 来建立表单的实际语言,然后在控件的计算中使用这个var:

<xf:var name="langmmm"> 
   <xxf:value value="xxf:get-session-attribute('fr-language')"/>
</xf:var>   

<xf:bind id="control-1-bind" name="control-1" ref="control-1" xxf:whitespace="trim" calculate="$langmmm"/> 

 <xf:output id="control-1-control" bind="control-1-bind">
     <xf:label ref="$form-resources/control-1/label"/>
     <xf:hint ref="$form-resources/control-1/hint"/>
     <xf:alert ref="$fr-resources/detail/labels/alert"/>
 </xf:output>

然后在操作中,我在观察者中指定了这个控件:

 <xf:action event="xforms-value-changed xforms-enabled" ev:observer="control-1-control" if="true()">
     <!-- Service to call -->
     <xf:send submission="gemeindeliste-submission"/>
 </xf:action>       

注意。我无法将 control-1 的可见性更改为 false(),因为这样将不会再提交 select。

是否有可能在表单语言更改时启动选择,而无需此额外控件?

非常感谢

【问题讨论】:

    标签: orbeon


    【解决方案1】:

    如果您同意数据库服务同时返回所有语言,您可以。见this doc for details

    【讨论】:

    • 感谢您的快速帮助!我尝试了链接中的信息,它适用于表单加载。从摘要表单中的意大利语开始,下拉值是意大利语,从德语开始,下拉值是德语。我的选择现在没有 where:SELECT gem, lang, gembeschr FROM gemeindenlong order by gembeschr/response/row[@lang = $fr-lang] 对我不起作用。我用&lt;xf:var name="response-items" value="/response/row[lang=$langmmm]"/&gt; 现在的反应事件是&lt;xf:action event="xforms-ready" ev:observer="fr-form-model" if="true()"&gt;
    • 但是更改表单中的语言不起作用。这看起来很难看:表单发生了变化,下拉值没有。因此,我想我的实现过于简化,无法与 fr-form-resources 实例中的下拉值具有类似的行为,其中 $form-resources 变量具有魔力:&lt;xf:itemset ref="$form-resources/gem/item"&gt; 下拉值也可以实现类似的行为从数据库加载?有什么例子吗?从数据库中加载下拉列表值将有利于长期维护
    • 它本来可以工作,如果不能正常工作,要么是配置错误,要么是 Orbeon Forms 中的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    相关资源
    最近更新 更多