Search code examples
javazk

How to listen even choose item from combobox in ZK 7?


I am use MVC design pattern. In file FmCompress.zul, I have:

<combobox id="cboFmCompress" model="${$composer.listTypeOfProcess}" mold="rounded" hflex="1">
    <attribute name="onCreate">self.setSelectedIndex(1);</attribute>
    <template name="model">
        <comboitem label="${each.typeOfCompress}" value="${each.typeOfCompressId}"></comboitem>
    </template>
</combobox>

Model for combo box: TypeOfCompressDTO.java

public class TypeOfCompressDTO {

    private String typeOfCompressId;
    private String typeOfCompress;

    public TypeOfCompressDTO() {
    }

    public TypeOfCompressDTO(String typeOfCompressId, String typeOfCompress) {
        this.typeOfCompressId = typeOfCompressId;
        this.typeOfCompress = typeOfCompress;
    }

    public String getTypeOfCompressId() {
        return typeOfCompressId;
    }

    public void setTypeOfCompressId(String typeOfCompressId) {
        this.typeOfCompressId = typeOfCompressId;
    }

    public String getTypeOfCompress() {
        return typeOfCompress;
    }

    public void setTypeOfCompress(String typeOfCompress) {
        this.typeOfCompress = typeOfCompress;
    }

}

In file controller: FmCompressComposer.java , I try something like this (my idea):

public class FmCompressComposer extends BaseCustomComposer<FmCompressService, FmCompressDTO> {
     //....    

    @Wire
    private Combobox cboToggleZipUnzip;

    //....

    // initialize value for combo box.
    public ListModel<TypeOfCompressDTO> getListTypeOfProcess() {
        lstTypeOfCompress = new ArrayList<TypeOfCompressDTO>();
        TypeOfCompressDTO t1 = new TypeOfCompressDTO("1", "Zip file");
        TypeOfCompressDTO t2 = new TypeOfCompressDTO("2", "Unzip file");
        lstTypeOfCompress.add(t1);
        lstTypeOfCompress.add(t2);
        listTypeOfProcess = new ListModelList(lstTypeOfCompress, true);
        return listTypeOfProcess;
    }

     // Listen even select item in combo box.
     public void onSelect$cboZipUnzip(){   
        searchDTO = new FmCompressDTO();    
        searchDTO.setType("1");        
        // my problem focus at this method, and at this line, get value what user choosen. searchDTO.setType(cboToggleZipUnzip.getSelectedItem().getValue().toString());
        List<FmCompressDTO> listDTO = fmCompressService.search(searchDTO);
        if (listDTO != null && !listDTO.isEmpty()) {
            ListModelList model = new ListModelList(listDTO);
            model.setMultiple(true);
            gridDataFmCompress.setModel(model);
            refreshGridData(null);
        }
    }

    //...

}

Please help me: In combo box, when user has event selecting, call method. (In method, get value what user choosen from combobox).


Solution

  • I assume your BaseCustomComposer is extending a GenericForwardComposer.

    If so, you are strictly bound to the naming conventions.

    As your id of the combobox is cboFmCompress your wired variable should be

    // no need for @Wire
    private Combobox cboFmCompress;
    

    and the event listener method should be
    public void onSelect$cboFmCompress(Event event) {}

    Here you can find a minimized zkfiddle: http://zkfiddle.org/sample/3hnhc92/2-SO-33120026