2012-11-14 2 views
0

ombobox onchange 이벤트가 트리거 될 때 ZP 피벗 테이블에서 데이터를 다시로드해야합니다.combobox onchange 이벤트 트리거시 Zuk PivotTable에서 새 값으로 데이터를 다시로드하는 방법

사용자가 comobox {아래 코드와 같이}에서 값을 변경하면 데이터가 사용자 선택에 따라 변경되어야합니다.

이있는 index.zul 아래

<window apply="org.zkoss.pivot.demo.PivotDemoBaseController" > 
    <hlayout> 
     <panel id="main" hflex="1" border="normal"> 
      <caption label="2012 Data"> 
       <toolbarbutton id="exportCsvBtn" label="Export CSV" /> 
       <toolbarbutton id="exportXlsBtn" label="Export XLS" /> 
       <toolbarbutton id="exportXlsxBtn" label="Export XLSX" /> 
      </caption> 
      <panelchildren> 
       <vlayout spacing="0"> 
        <pivottable id="pivot" hflex="1" pageSize="15" > 





         <combobox model="${lm}" id="selectGeo"/> 
         <div>All People</div> 
        </pivottable> 
        <div id="descDiv" /> 
       </vlayout> 
      </panelchildren> 
     </panel> 
     <panel id="field" title="Control" width="300px" border="normal" > 
      <panelchildren> 
       <vlayout style="padding: 10px"> 
        <!-- Predefined scenario: --> 
        <hlayout id="preDef" spacing="0" /> 
        <div class="footnote" style="padding: 5px 0">(Drag fields among the areas below)</div> 
        <pivot-field-control id="pfc" height="300px" /> 
        <hlayout hflex="1"> 
         <checkbox id="autoUpdate" label="Auto Update" checked="true" /> 
         <div hflex="1" /> 
         <!-- <button id="updateBtn" label="Update" disabled="true" autodisable="+self" /> --> 
        </hlayout> 
        <separator /> 
        <checkbox id="colGrandTotal" label="Enable grand total for columns" /> 
        <checkbox id="rowGrandTotal" label="Enable grand total for rows" /> 
        <div> 
         <radiogroup id="dataOrient"> 
          Data field orientation: 
          <radio id="colOrient" label="column" /> 
          <radio id="rowOrient" label="row" /> 
         </radiogroup> 
        </div> 
       </vlayout> 
      </panelchildren> 
     </panel> 
    </hlayout> 
</window> 

공용 클래스 PivotDemoBaseController가 {

private static final long serialVersionUID = -7531153593366258488L; 

private static final String[] TITLES = new String[] { "(Data Title)", "(Column Title)", "(Row Title)" }; 


@Wire 
private Pivottable pivot; 

@Wire 
private PivotFieldControl pfc; 

@Wire 
private Button updateBtn; 

@Wire 
private Checkbox colGrandTotal, rowGrandTotal; 

@Wire 
private Radio colOrient, rowOrient; 

@Wire 
private Hlayout preDef; 

@Wire 
private Div descDiv; 

private TabularPivotModel _model; 

@Wire 
private Combobox selectGeo; 




private CellStyleConfigurator styleConfigurator; 

public void onCheck$autoUpdate(CheckEvent event) { 
    boolean deferred = !event.isChecked(); 
    pfc.setDeferredUpdate(deferred); 
    if (!deferred) 
     updateBtn.setDisabled(true); 
} 


@Listen("onChange = #selectGeo") 
public void onChangeSelectGeo(Event event) {   
    String geography = selectGeo.getValue(); 
    System.out.println("Value---"+geography); 

} 

public void onClick$updateBtn() { 
    pfc.update(); 
} 

public void onPivotFieldControlChange$pfc() { 
    if (!pfc.isUpdated()) 
     updateBtn.setDisabled(false); 
} 

public void onCheck$colGrandTotal(CheckEvent event) { 
    System.out.println("PivotDemoBaseController.onCheck$colGrandTotal()"); 
    pivot.setGrandTotalForColumns(event.isChecked()); 
} 

public void onCheck$rowGrandTotal(CheckEvent event) { 
    pivot.setGrandTotalForRows(event.isChecked()); 
} 

public void onCheck$dataOrient(CheckEvent event) { 
    pivot.setDataFieldOrient(((Radio)event.getTarget()).getLabel()); 
} 

public void onClick$exportCsvBtn() throws IOException { 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    PivotExportContext context = Exports.getExportContext(pivot, true, TITLES); 
    Exports.exportCSV(out, context); 
    Filedownload.save(out.toByteArray(), "text/csv", "pivot.csv"); 
    try { 
     out.close(); 
    } catch (IOException e) {} 
} 

public void onClick$exportXlsBtn() throws IOException { 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    PivotExportContext context = Exports.getExportContext(pivot, true, TITLES); 
    Exports.exportExcel(out, "xls", context, styleConfigurator); 
    Filedownload.save(out.toByteArray(), "application/vnd.ms-excel", "pivot.xls"); 
    try { 
     out.close(); 
    } catch (IOException e) {} 
} 

public void onClick$exportXlsxBtn() throws IOException { 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    PivotExportContext context = Exports.getExportContext(pivot, true, TITLES); 
    Exports.exportExcel(out, "xlsx", context, styleConfigurator); 
    Filedownload.save(out.toByteArray(), "application/vnd.ms-excel", "pivot.xlsx"); 
    try { 
     out.close(); 
    } catch (IOException e) {} 
} 

@NotifyChange("*") 
@Override 
public void doAfterCompose(Component comp) throws Exception { 
    System.out.println("PivotDemoBaseController.doAfterCompose()"); 
    super.doAfterCompose(comp); 
    StaticPivotModelFactory pmf = StaticPivotModelFactory.INSTANCE; 

    //PivotModelFactory pmf= (PivotModelFactory) arg.get("factory"); 
    _model = pmf.build(); 
    pivot.setModel(_model); 
    pfc.setModel(_model); 
    Executions.createComponents(pmf.getDescriptionURI(), descDiv, null); 

    loadConfiguration(pmf.getDefaultConfigurator()); 

    // load predefined scenario 
    for(PivotConfigurator conf : pmf.getConfigurators()) 
     preDef.appendChild(getPreDefDiv(conf)); 
} 

private void initControls() { 
    System.out.println("PivotDemoBaseController.initControls()"); 
    // grand totals 
    colGrandTotal.setChecked(pivot.isGrandTotalForColumns()); 
    rowGrandTotal.setChecked(pivot.isGrandTotalForRows()); 

    // data orientation 
    ("column".equals(pivot.getDataFieldOrient()) ? 
      colOrient : rowOrient).setChecked(true); 

    pfc.syncModel(); // field control 
} 

private Component getPreDefDiv(final PivotConfigurator conf) { 
    Div div = new Div(); 
    div.setHflex("1"); 
    div.setSclass("predef"); 
    div.appendChild(new Label(conf.getTitle())); 
    div.addEventListener("onClick", new EventListener(){ 
     public void onEvent(Event event) throws Exception { 
      loadConfiguration(conf); 
     } 
    }); 
    return div; 
} 

private void loadConfiguration(PivotConfigurator conf) { 
    System.out.println("PivotDemoBaseController.loadConfiguration()"); 
    _model.clearAllFields(true); 
    conf.configure(_model); 
    conf.configure(pivot); 
    pivot.setPivotRenderer(conf.getRenderer()); 
    styleConfigurator = conf.getCellStyleConfigurator(); 
    initControls(); 
} 

}

SelectorComposer를 확장 내 컨트롤러의 코드3210

도움을 주시면 감사하겠습니다.

+0

지금까지 해보신 것은 무엇입니까? comobobox에 대한 onChange 이벤트 처리기가 선택된 값을 인쇄하는 것 외에는 아무 것도하지 않는 것을 볼 수 있습니다. 피봇 테이블을 업데이트하려면 새 모델을 준비하고 setModel() API를 호출하면됩니다. – kachhalimbu

+0

답장을 보내 주셔서 감사합니다 ... NotifyChange ("yourModelObject") 시도했지만 나를 위해 작동하지 않는 것 같습니다. – Gautam

+1

MVC (피벗 팅에서 setModel()) 또는 MVVM (모델을 업데이트하는 메서드에서 NotifyChange 주석)을 사용합니다. NotifyChange로 시도한 것과 "나를 위해 작동하지 않는 것"이 ​​어떤 힌트를주지는 못했습니다. 구체적인 세부 정보를 제공하여 도움을 드리겠습니다. MVVM은 ZK의 초보자 인 경우 약간의 학습 곡선이 있으므로 MVVM으로 변경하는 대신 MVC를 사용하는 위의 코드를 개선하는 것이 좋습니다. – kachhalimbu

답변

2

당신은 @NotifyChange 주석을 의미한다고 생각하지만 사용하지 않은 MVVM 데이터 바인딩을위한 것입니다.
당신은 MVVM data binding로 전환 할 수 있습니다 또는 당신이 이런 식으로 업데이트 schould :

@Listen("onChange = #selectGeo") 
public void onChangeSelectGeo(CheckEvent event) { 
    // Manipulate pivot element here. 
} 

을 더 많은 정보 CheckEventMVVM vs MVC를 참조하십시오.