4. コンポーネントのライフサイクル

目次

ページの読み込みサイクル
ページ初期段階
コンポーネント作成段階
イベント処理段階
書き込み(Rendering)段階
ページ更新のライフサイクル
リクエスト処理段階
イベント処理段階
書き込み段階
モールド(Molds)
不要なコンポーネントの処理

この章はページの読み込みとページ更新のライフサイクルについて説明します。

ページの読み込みサイクル

ZKローダーがZUMLページを読み込み、翻訳するのに4段階があります。ページ初期段階、コンポーネント作成段階、イベント処理段階、書き込み段階です。

ページ初期段階

この段階ではZKはinitと呼ばれるコマンドを処理します。このようなコマンドが定義されていなければ、この段階は省略されます。

class 属性を伴ったプロセスのコマンドに対し、指定されたクラスのインスタンスは作られます。そして、doInitメソッドが呼び出されます。クラスが何をするか?はアプリケーションしだいです。

<?init class="MyInit"?>

他形式のinitコマンドは以下のようにzscript属性でスクリプトコードファイルを指定します。そのファイルはページの初期段階で翻訳されます。

<?init zscript="/my/init.zs"?>

ページ初期段階ではページはデスクトップにまだ添付されていないことに注意してください。

コンポーネント作成段階

この段階ではZKローダーがZUMLページを翻訳します。必要に応じて、コンポーネントを初期化したり、作成したりします。以下のようにいくつかのステップを踏みます。

  1. どの要素に対しても、if とunless属性を調べて有効かどうかを決めます。有効でないなら、メソッドとその子メソッドは無視されます。

  2. forEach属性が指定されたら、ZKはその項目の集合中で以下のステップを繰り返します。

  3. 要素名を基にしてコンポーネントを作成します。または、use属性の中に指定されたクラスを使って作成します。

  4. ZUMLページの中で明記された属性の順番でメンバーは一つ一つ初期化されます。

  5. 重ねられた要素を翻訳し、すべてのプロセスを繰り返します。

  6. コンポーネントがorg.zkoss.zk.ui.ext.AfterComposeインターフェースを実装するなら、afterComposeメソッドを使用します。[27].

  7. 子要素が作成されてからonCreateイベントはこのコンポーネントに送られます。それによって、アプリケーションがいくつかの要素を初期化できます。onCreateイベントは初めに子コンポーネントのために呼び出されます。

【補足】:開発者はonCreateイベント又はAfterComposeを実装することで、各々のアプリケーションに対して異なる初期化を行うことができます。AfterComposeはコンポーネント作成段階の中で呼び出されます。一方onCreateイベントはイベントリスナによってコントロールされます。

イベントリスナはモーダルダイアログ作成といった操作を一時保留にしたり再び行ったりできます。一方AfterComposeは他のスレッドに分岐させる必要がないのでより速いです。

イベント処理段階

この段階ではデスクトップ上の待ち行列にあるイベントに対し、対応するリスナをZKが呼び出します。

独立したスレッドはリスナを呼び出します。そうして、他のイベントプロセスに影響を与えることなく一旦停止できます。

プロセスの中のイベントリスナは他のイベントを起こすこともあります。詳しくはイベントの監視と処理の章を参照してください。

書き込み(Rendering)段階

すべてのイベントを終えたら、ZKはそれらのコンポーネントをHTMLページへ書き込み、そのページをブラウザへ送ります。

コンポーネントを書き込むのに、redrawメソッドを呼び出します。このメソッドでは、コンポーネントの実装はコンポーネントの中身を変えてはいけません。



[27] AfterComposeと呼ばれるのはステップ3~5がいわゆるcomposingです。