如何动态更改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)”)。需要说明的是:每次从Combobox中选择一个值时,dataTable都应该重新加载另一个值。
我想这可以用于JavaScript,但我不知道它究竟是如何完成的。 任何帮助,将不胜感激。谢谢!
编辑:我必须使用JSF1.2,所以我不能使用任何内置的AJAX功能。
答案 0 :(得分:1)
让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>