2013-07-17 2 views
0

어떻게 h : dataTable의 값을 동적으로 변경할 수 있습니까? 나는 SelectOneMenu에서 언어를 선택하면동적으로 h : JSF의 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> 

그래서, 기본적으로, DataTable에 다른 값을 사용해야합니다 (같은 "EN (# {DataProvider.mapValues)") : 나는 (스 니펫) 다음 코드가 . 분명히하기 위해서 : 내가 Combobox에서 값을 선택할 때마다, dataTable은 다른 값으로 다시로드해야합니다.

JavaScript로는 작동하지만 내게 정확히 어떻게해야하는지 모르겠습니다. 도움이 될 것입니다. 감사!

EDIT : JSF1.2를 사용해야하므로 기본 제공 AJAX 기능을 사용할 수 없습니다.

답변

1

이 같은 DataProvider.getMapValues 뭔가 확인 :

private String selectedLanguage; // + getter and setter  

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

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

바인드를 당신의 h:selectOneMenu 선택한 값으로 selectedLanguage이 같은 선택에 h:dataTable의 아약스 업데이트를 수행

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

나는 어떤 사업을 추가하는 것이 좋습니다 않을 것 로직에 대한 설명은 [JSF가 getter를 여러 번 호출하는 이유] (http://stackoverflow.com/q/2090033/1065197)를 참조하십시오. 대신지도의 값 (또는 ''을 채우기 위해 사용하는 구조체 OP)을 업데이트 할''에'listener'를 추가하십시오. –

+0

@LuiggiMendoza - 당신 말이 맞아요.'getMapForLanguage'가 완료하는데 약간의 시간이 걸리면이 방법을 추천 할 것입니다. – dratewka

+0

접근 해 주셔서 감사합니다! 불행히도 AJAX에 대한 내장 지원 기능이없는 JSF1.2를 사용해야한다는 점을 잊어 버렸습니다. 다른 생각? – hurley

관련 문제