数据绑定:数据绑定是一种机制,在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}
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;
}
}
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>
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;
}
}