动态更改JSF中的h:dataTable值

Dynamically change h:dataTable value in JSF

本文关键字:dataTable 中的 JSF 动态      更新时间:2023-09-26

如何动态更改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>

因此,基本上,当我从SelectOneMenu中选择一种语言时,dataTable应该使用不同的值(如"#{DataProvider.mapValues(en)")。需要明确的是:每次我从组合框中选择一个值,dataTable都应该用另一个值重新加载。

我想这对JavaScript来说是可行的,但我不知道具体要怎么做。如有任何帮助,我们将不胜感激。谢谢

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

使DataProvider.getMapValues像这样:

private String selectedLanguage; // + getter and setter    
private Map getMapForLanguage(String language)
{ ... }
public Map getMapValues(){
    return getMapForLanguage(selectedLanguage);
}

selectedLanguage绑定到您选择的h:selectOneMenu值,并在选择后对h:dataTable进行ajax更新,如下所示:

<h:dataTable id="myTable" ... >
...
<h:selectOneMenu value="#{DataProvider.selectedLanguage}">
    ...
    <f:ajax render="myTable"/>
</h:selectOneMenu>