Javascript 动态更改JSF中的h:dataTable值

Javascript 动态更改JSF中的h:dataTable值,javascript,jsf,Javascript,Jsf,如何动态更改h:dataTable的值?我有以下代码只是一个片段: <h:dataTable value="#{DataProvider.mapValues}" var="o" border="1"> <h:column> <h:outputText value="#{o.key}"></h:outputText> </h:

如何动态更改h:dataTable的值?我有以下代码只是一个片段:

        <h:dataTable value="#{DataProvider.mapValues}" var="o" border="1">
                <h:column>
                    <h:outputText value="#{o.key}"></h:outputText>
                </h:column>
                <h:column>
                    <h:outputText value="#{o.value}"></h:outputText>
                </h:column>
        </h:dataTable>

            <h:selectOneMenu>
                <f:selectItem itemLabel="Choose Language.."></f:selectItem>
                <f:selectItem itemLabel="DE"></f:selectItem>
                <f:selectItem itemLabel="CZ"></f:selectItem>
                <f:selectItem itemLabel="EN"></f:selectItem>
                <f:selectItem itemLabel="FR"></f:selectItem>
                <f:selectItem itemLabel="ES"></f:selectItem>
                <f:selectItem itemLabel="PT"></f:selectItem>
            </h:selectOneMenu>
因此,基本上,当我从SelectOne菜单中选择一种语言时,dataTable应该使用不同的值,如{DataProvider.mapValuesen。要明确的是:每次我从组合框中选择一个值时,dataTable都应该使用其他值重新加载

我想这将与JavaScript一起工作,但我不知道具体如何完成。 任何帮助都将不胜感激。谢谢

编辑:我必须使用JSF1.2,所以我不能使用任何内置的AJAX功能。

使DataProvider.getMapValues如下:

private String selectedLanguage; // + getter and setter    

private Map getMapForLanguage(String language)
{ ... }

public Map getMapValues(){
    return getMapForLanguage(selectedLanguage);
}
<h:dataTable id="myTable" ... >
...
<h:selectOneMenu value="#{DataProvider.selectedLanguage}">
    ...
    <f:ajax render="myTable"/>
</h:selectOneMenu>
将selectedLanguage绑定到您的h:selectOneMenu选定值,并在选择后对h:dataTable执行ajax更新,如下所示:

private String selectedLanguage; // + getter and setter    

private Map getMapForLanguage(String language)
{ ... }

public Map getMapValues(){
    return getMapForLanguage(selectedLanguage);
}
<h:dataTable id="myTable" ... >
...
<h:selectOneMenu value="#{DataProvider.selectedLanguage}">
    ...
    <f:ajax render="myTable"/>
</h:selectOneMenu>

我不建议在getter中添加任何业务逻辑,请参阅。相反,请在中添加一个侦听器,该侦听器将更新映射的值或OP用于填充的结构。@luigimendoza-你说得对,如果getMapForLanguage需要一些时间来完成,我也建议使用这种方法。感谢你的方法!不幸的是,我放弃了还需要提到的是,我必须使用JSF1.2,它没有对AJAX的内置支持。还有其他想法吗?@hurley如果你使用像RichFaces这样的第三方库,有一个类似的行为。下次添加你正在使用的确切JSF版本。