ZK数据绑定

来源:互联网 发布:备案域名后缀 编辑:程序博客网 时间:2024/06/05 10:00
数据绑定:数据绑定是一种机制,在UI组件和数据源之间自动完成数据复制。应用开发人员只需告诉绑定管理器UI组件和数据的联系。然后数据绑定期会自动完成加载(将数据加载到UI)并保存(UI保存到数据源)

1.在zul中添加
<? init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?>

2.有两种形式
2.1. window 用 apply 来实现   @{win$composer.books}
2.2. window 用 use 来实现       @{win.books}

3.实例

bookDatabind.zul

<?xml version="1.0" encoding="UTF-8"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?> <!--1.在zul中添加-->
<!--use实现@{win.books} -->

<!-- <window id="win" use="com.ace.zk.composer.BookComposer" title="ZK Tutorial" width="1024px" border="normal"> -->
<!--apply实现 @{win$composer.books} -->

<window id="win" apply="com.ace.zk.composer.BookComposer" title="ZK Tutorial" width="1024px" border="normal">  
    <listbox model="@{win$composer.books}" selectedItem="@{win$composer.book}">  <!-- @{win.books} -->
        <listhead sizable="true">  
            <listheader label="名称" width="100px" sort="auto(name)" />  
            <listheader label="作者" width="250px" sort="auto(author)" />  
            <listheader label="出版社" width="250px" sort="auto(pub)" />  
            <listheader label="价格" width="250px" sort="auto(price)" />  
        </listhead>  
        <listitem self="@{each=book}">  
            <listcell label="@{book.name}" />  
            <listcell label="@{book.author}" />  
            <listcell label="@{book.pub}" />  
            <listcell label="@{book.price}"/>  
        </listitem>  
    </listbox>
    <grid>
        <columns>
            <column label="名称" align="center" />
            <column label="作者" align="center" />
            <column label="价格" align="center" />
            <column label="出版社" align="center" />
        </columns>
        <rows>
            <row>
                <textbox id="namebox" value="@{win$composer.book.name}" width="95%" />
                <textbox id="authorbox" value="@{win$composer.book.author}" width="95%" />
                <doublebox id="pricebox" value="@{win$composer.book.price}" width="95px" />
                <label id="pubbox" value="@{win$composer.book.pub}" />
            </row>
        </rows>
    </grid>
</window>

composer
package com.ace.zk.composer;
/*public class BookComposer extends Window{*/
public class BookComposer extends SelectorComposer<Component> {
    private final List<Book> books = new ArrayList<Book>();
    private Book book;

    /*不用数据绑定的做法
    @Wire
    private Textbox namebox;
    @Wire
    private Textbox authorbox;
    @Wire
    private Doublebox pricebox;
    @Wire
    private Label pubbox;

    @Wire
    private Listbox listbox;
    @Listen("onSelect = #listbox")
    public void selected() {
        book = listbox.getSelectedItem().getValue();
        namebox.setValue(book.getName());
        authorbox.setValue(book.getAuthor());
        pricebox.setValue(book.getPrice());
        pubbox.setValue(book.getPub());
    }*/
    /**
     * @return the book
     */
    public Book getBook() {
        return book;
    }
    /**
     * @param book the book to set
     */
    public void setBook(final Book book) {
        this.book = book;
    }


    @Wire
    private Window win;
    /**
     * @return the books
     */
    public List<Book> getBooks() {
        books.add(new Book("ace", "ace", "ace", 20.0));
        books.add(new Book("ace1", "ace1", "ace1", 20.0));
        books.add(new Book("ace2", "ace2", "ace2", 20.0));
        books.add(new Book("ace3", "ace3", "ace3", 20.0));
        books.add(new Book("ace4", "ace4", "ace4", 20.0));
        books.add(new Book("ace5", "ace5", "ace5", 20.0));
        books.add(new Book("ace6", "ace6", "ace6", 20.0));
        books.add(new Book("ace7", "ace7", "ace7", 20.0));
        return books;
    }
}





原创粉丝点击