これは、プログラムhttp://docs.zkoss.org/wiki/Use_Load-On-Demand_to_Handle_Huge_Dataで書かれたアーティクルのZKGrailsへのポートです。
.このチュートリアルZKGrails 0.7.1およびそれ以降を使用します。オリジナル
Grailsプロジェクトを作成します
このタイプのチュートリアル用のGrailsプロジェクトを準備します:
$ grails create-app ondemand
次に、 ZKGrailsをインストールする必要があります。
最新のバージョンを自動的にインストールするには、次のように入力します:
$ grails install-plugin zk
シンプルなドメインクラスのEmployeeを使用してデモプログラムを作成します。
Grailsのドメインクラスを作成するには、ドメインを作成するには、 クラス名を使用して以下の様にcreate-domain-classコマンドを使用します:
$ grails create-domain-class employee
次に、ドメインクラスのEmployeeに2つのプロパティを追加します。すなわちfullname 、usernameで両方ともStringです。
class Employee {
String fullname String username
static constraints = { } }
$ grails create-zul employee
このコマンドでgrails-apps/composers/EmployeeComposer.groovyも作成されます。
<window apply="${employeeComposer}">
<vbox> <image src="images/grails_logo.jpg"/> </vbox>
<listbox id="lstEmployee" width="100%" checkmark="true"> <listhead sizable="true"> <listheader label="ID" sort="auto" /> <listheader label="Full Name" sort="auto" /> <listheader label="User Name" sort="auto" /> </listhead> </listbox> <paging id="pagEmployee" pageSize="30" />
</window>
このコードでは、 2のプロパティlstEmployee 、 pagEmployeeを見ることができます 。
どちらもGenericForwardComposerのサブクラスで、GrailsComposer により注入されています 。
それらは、明らかに、 zulファイルにおけるリストボックスとページングコンポーネントを表しています。
そこにはafterCompose クロージャも見えます 。
このクロージャはdoAfterComposeによって起動され、そこでコンポーネントを初期化するGroovyが動作します。
アクティブなページを更新する為にpagEmployeeをクリックする度に自動イベントハンドラonPaging_pagEmployeeがコールされます。
ハンドラが動作するにはハンドラの唯一の引数はForwardEventもしくはEventでなければならない事に注意。
redrawメソッドにおいて宣言される、Groovyのデフォルト引数の使用例をお見せしましょう。
それは、 afterCompose 内でredraw()をコールすることですが、redraw(0)を意味します 。
また、 redraw メソッドにはZKGrails によって追加される動的メソッドを使用するところが2ヶ所あります。
最初の1つは listbox#clear ですべての ListItem を削除します。
2つ目は append で、 ZK Builderを介してのコンポーネントを構築を受け付けています。
import org.zkoss.zkgrails.* import org.zkoss.zk.ui.event.*
class EmployeeComposer extends GrailsComposer {
def lstEmployee def pagEmployee
def afterCompose = { c -> pagEmployee.totalSize = Employee.count() redraw() }
def onPaging_pagEmployee(ForwardEvent fe) { def e = fe.origin redraw(e.activePage) }
def redraw(page=0) { def list = Employee.list(offset: page * pagEmployee.pageSize, max: pagEmployee.pageSize)
lstEmployee.clear() lstEmployee.append { list.each { e -> listitem(value: e) { listcell(label: e.id) listcell(label: e.fullname) listcell(label: e.username) } } } }
}
アプリケーションを実行する前に、いくつかの試験データを表示する必要があります。
grails-app/conf/BootStrap.groovy オープンし、 initのクロージャに、次のスニペットを追加します。
def init = { servletContext -> 1000.times { i -> new Employee(fullname: "Name $i", username: "user$i").save() } }
上記のコードでは、1000個のドメインオブジェクトクラス Employee を作成するために、1000回ループします 。
アプリケーションを実行します
$ grails run-app
そこで、お使いのブラウザポイントを http://localhost:8080/ondemand/employee.zul で確認します。
|