代码之家  ›  专栏  ›  技术社区  ›  Fakhryan Albar

从java到zul zk的动态单选按钮

  •  2
  • Fakhryan Albar  · 技术社区  · 7 年前

    任何人都知道如何创建动态单选按钮,例如数据库中的数据,但是 现在我不用了。



    <?page title="new page title" contentType="text/html;charset=UTF-8"?>
    <zk>
    <window title="Customer" border="normal" apply="org.zkoss.bind.BindComposer"
        viewModel="@id('vm') @init('vmd.RadioButton')">
         <cell> 
            <vlayout> 
                <radiogroup id="radiogroup">
                </radiogroup>
            </vlayout> 
        </cell>
    </window>
    </zk>
    


    单选按钮。Java语言

    public class RadioButton {
    
        public Radiogroup getRadiogroup() {
            return radiogroup;
        }
    
        public void setRadiogroup(Radiogroup radiogroup) {
            this.radiogroup = radiogroup;
        }
    
        private Radiogroup radiogroup = new Radiogroup();
    
        @Init
        public void load() {
            ArrayList<String> columnEntries = new ArrayList<String>();
            columnEntries.add("a");
            columnEntries.add("b");
    
            for (String entry : columnEntries) {
                radiogroup.appendItem(entry, entry);
            }
            radiogroup.setVisible(true);
        }
    }
    

    1 回复  |  直到 7 年前
        1
  •  3
  •   Yann39    7 年前

    根据ZK组件生命周期, init @AfterCompose ). 你也可以 wire

    视图模型 :

    package your.package;
    
    import org.zkoss.bind.annotation.AfterCompose;
    import org.zkoss.bind.annotation.ContextParam;
    import org.zkoss.bind.annotation.ContextType;
    import org.zkoss.zk.ui.Component;
    import org.zkoss.zk.ui.select.Selectors;
    import org.zkoss.zk.ui.select.annotation.Wire;
    import org.zkoss.zul.Radiogroup;
    
    public class RadioButton {
    
        @Wire
        private Radiogroup radiogroup;
    
        @AfterCompose
        public void init(@ContextParam(ContextType.VIEW) Component view) {
            Selectors.wireComponents(view, this, false);
            radiogroup.appendItem("Test 1", "test1");
            radiogroup.appendItem("Test 2", "test2");
        }
    }
    

    <vlayout apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('your.package.RadioButton')">
        <radiogroup id="radiogroup"/>
    </vlayout>
    

    还可以从viewmodel绑定列表。

    例子:

    :

    private List<String> optionList;
    private String selectedOption;
    
    public String getSelectedOption() {
       return selectedOption;
    }
    public void setSelectedOption(String selectedOption) { 
       this.selectedOption = selectedOption;
    }
    public List<String> getOptionList() {
       return optionList;
    }
    public void setOptionList(List<String> optionList) {
       this.optionList = optionList;
    }
    
    @Init
    public void init() {
        List<String> entries = new ArrayList<String>();
        entries.add("a");
        entries.add("b");
        setOptionList(entries);
    }
    

    :

    <vlayout apply="org.zkoss.bind.BindComposer" viewModel="@id('vmd') @init('your.package.yourViewModel')">
       <radiogroup selectedItem="@bind(vmd.selectedOption)" model="@load(vmd.optionList)">
          <template name="model">
             <radio label="@load(each)" value="@load(each)"/>
          </template>
       </radiogroup>
    </vlayout>
    

    更新 http://books.zkoss.org/zk-mvvm-book/8.0/advanced/wire_components.html


    还有其他几种方法可以做到这一点,例如使用 Composer .