2013-07-17 52 views
0

如何動態更改h:dataTable的值?我有以下代碼(只是一個片段):動態更改JSF中的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用於語言,數據表應該使用不同的值(如「#{DataProvider.mapValues(EN)」) 。要清楚:每次我從Combobox中選擇一個值時,dataTable應該用另一個值重新加載。

我想這可以在JavaScript中工作,但我不知道它究竟是如何完成的。 任何幫助,將不勝感激。謝謝!

編輯:我必須使用JSF1.2,所以我不能使用任何內置的AJAX功能。

回答

1

DataProvider.getMapValues是這樣的:

private String selectedLanguage; // + getter and setter  

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

public Map getMapValues(){ 
    return getMapForLanguage(selectedLanguage); 
} 

綁定的selectedLanguageh:selectOneMenu選擇的價值和被選擇後,這樣做的h:dataTable一個Ajax更新:

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

我不會推薦添加任何業務getter中的邏輯,請參閱[爲什麼JSF多次調用getters](http://stackoverflow.com/q/2090033/1065197)。相反,在你的''中添加一個'listener',它將更新地圖的值(或者結構OP用於填充'')。 –

+0

@LuiggiMendoza - 你說得對,如果'getMapForLanguage'需要一些時間才能完成,我還會推薦這種方法。 – dratewka

+0

感謝您的方法!不幸的是,我忘記提及我必須使用JSF1.2,它沒有內置的AJAX支持。任何其他想法? – hurley