プロセス命令

XMLプロセス命令はZUMLページの処理方法を説明しています。

page コマンド

<?page [id="..."] [title="..."] [style="..."] [language="xul/html"] [zscript-language="Java"]?>

ページの属性を定義します。

【ヒント】: XMLドキュメント内のどこでもpageコマンドをおくことができますが、最上層にコマンドを置くときのみ、language属性には意味があります。つまり、ルート要素と同じ階層です。

Attribute Name

Description

id

[Optional][Default: generated automatically]

ページの識別子を指定して、検索できるようにします。

より詳しくは上級者のための機能の章のページ認識セクションを参照してください。

title

[Optional][Default: none]

ブラウザのタイトルとして表示されるページタイトルを指定します。

org.zkoss.zk.ui.Pageインターフェース中でsetTitleメソッドを呼ぶことで動的に変更できます。

style

[Optional][Default: width:100%]

ページを読み込むCSSスタイルを指定します。指定されていない場合、書式によって決まります。デフォルトでは幅が100%になっています。

language

[Optional][Default: depending on the extension][xul/html | xhtml]

このページの言語を指定します。

現在、xulhtmlxhtmlが利用できます

zscript-language

[Optional][Default: Java][Java | JavaScript | Ruby | Groovy]

zscript要素が明確にスクリプト言語を指定していないときのデフォルトのスクリプト言語を指定します。

言語が選択されていなかったら、Javaが採用されます。現在ZKは4つの言語が使用可能です。JavaJavaScriptRubyGroovyです。この選択は大文字・小文字を区別しません。

例えば、JavaScriptをデフォルトのスクリプト言語に指定したい場合、以下のようにします。

<?page zscript-language="JavaScript"?>

<zscript>
          var m = function () {    
                    //...        
          }    
</zscript>

使用可能なスクリプト言語を追加することができます。他のスクリプト言語を使用セクションを参照してください

component コマンド

<?component name=" myName " macro-uri=" /mypath/my.zul " [ prop1 =" value1 " ] [ prop2 =" value2 "]... ?>

<?component name=" myName " [class=" myPackage.myClass "] [extends=" existentName "] [mold-name=" myMoldName "] [mold-uri="/ myMoldUri "] [ prop1 =" value1 " ] [ prop2 =" value2 "]... ?>

特定のページに新しいコンポーネントを定義します。このコマンドの中で定義されたコンポーネントはこのコマンドを使っているページだけに参照可能です。どのページ中でも、使うことができるコンポーネントを定義するため、拡張機能(ウェブアプリケーションですべてのページのコンポーネントを定義するXMLファイル)を使います。[33]

マクロによるものとクラスによるものの二つのフォーマットがあります。

マクロフォーマット

<?component name=" myName " macro-uri=" /mypath/my.zul " [inline="true| false "] [class=" myPackage.myClass "] [ prop1 =" value1 " ] [ prop2 =" value2 "]... ?>

ZUMLページを基にした新しいコンポーネントを定義します。マクロコンポーネントと呼びます。つまり、新しいコンポーネントのインスタンスが作られると、ZUMLページ(macro-uri属性)を基にした子コンポーネントが作られます。より詳しくは、マクロコンポーネント章を参照してください。

クラスフォーマット

<?component name=" myName " [class=" myPackage.myClass "] [extends=" existentName "] [mold-name=" myMoldName "] [mold-uri="/ myMoldUri "] [ prop1 =" value1 " ] [ prop2 =" value2 "]... ?>

extends属性が指定されず、クラスに基づいている場合作られた新しいコンポーネントをnative componentと呼びます。クラスはorg.zkoss.zk.ui.Componentインターフェースを実装しなければなりません。

新しいコンポーネントを定義するため、class属性を必ずしも指定しなければなりません。そのクラス属性はZKによって使用され、コンポーネントの新しいインスタンスを提供します。

新しいコンポーネントを定義するほか、extends=”existentName”を指定することで存在しているコンポーネントのプロパティを上書きできます。つまり、extendsが指定されると、指定されたコンポーネントの定義はデフォルトとして呼び出されて、このコマンドの中で定義されているプロパティのみを上書きします。

例えば、Mywindowをデフォルトのウィンドウ(ZUMLページ中のorg.zkoss.zul.Window) の代わりに使用し、mywindowと呼ばれる新しいコンポーネントを定義することを想定します。そうして、以下のように宣言することができます。

<?component name="mywindow" extends="window" class="MyWindow"?>
...
<mywindow>
...
</mywindow>

上は以下に書かれているコードと同じ働きをします。

<window use="MyWindow">
...
</window>

同様にして、以下の定義を使い、OKをデフォルトのラベルとして使用し、青い枠をこのページの中の指定されたすべてのボタンに使います。

<?component name="okbutton" extends="button" label="OK"
  style="border:1px solid blue"?>

新しいコンポーネントの名前は存在している名前と同じに設定できます。この場合、コンポーネントの指定された種類のインスタンスは存在した定義を隠すように指定した初期プロパティを使います。例えば、以下のコードはデフォルトですべてのボタンに青い枠を持つようにさせています。

<?button name="button" extends="button" style="border:1px solid blue"?>
<button/> <!-- with blue border -->

詳しくは開発用リファレンスをご覧ください。

Attribute Name

Description

name

[Required]

コンポーネント名

macro-uri

[Required, if the by-macro format is used][EL is not allowed]

マクロフォーマットを使って、ZUMLページのURIを指定します。ZUMLページはコンポーネント作成のテンプレートとして使われます。

class

[Optional]

クラスとマクロフォーマットの両方を使い、コンポーネントのインスタンスを例示するためのクラスを指定します。

ext ends

[Optional]

クラスフォーマットを使い、デフォルト値としてプロパティを使用するコンポーネントの名前を表します。そして、このコマンド内で定義されたプロパティのみをオーバーライドします。

指定されていない場合、存在しているどの定義も無視します。新しいコンポーネントは更新され、このコマンド内で定義されたプロパティを伴って定義されます。

mold-name

[Optional][Default: default]

クラスフォーマットを使ってスタイル名を指定します。mold-nameが指定されている場合、mold-uriも指定されていなければなりません。

mold-uri

[Optional][EL is allowed]

クラスフォーマットを使用し、URIスタイルを指定します。mold-uriが指 定されて、mold-nameが指定されていない場合、形式名はデフォルトが使用されます。

pro p1 , prop2 ...

[Optional]

by-classby-macroの両方を使用して、コンポーネントの初期プロパティ(aka.,members)を指定します。

ZUMLによってコンポーネントが作成された場合(aka.,ZUMLページの一部分として、指定された)初期プロパティは自動的に適用されます。

一方、自分自身でコンポーネントを作成した場合(つまり、Javaコードを用いて作成した場合)初期プロパティは適用されません。初期プロパティを使用したい場合、applyPropertiesメソッドを呼び出します。

init コマンド

<?init class="..." [arg0="..."] [arg1="..."] [arg2="..."] [arg3="..."]?>

<?init zscript="..." [arg0="..."] [arg1="..."] [arg2="..."] [arg3="..."]?>

二つのフォーマットがあります。一つ目のフォーマットはクラスを指定して、カスタムアプリケーション初期化を行います。二つ目のフォーマットはzscriptファイルを指定して、カスタムアプリケーション初期化を行います。

ページが処理され、デスクトップに付加される前に初期化は行われます。こうして、初期化中、getDesktopgetIDgetTitleメソッドはnullを返します。現在使用中のデスクトップを検索するため、org.zkoss.zk.ui.Executionインターフェースを使用します。

initコマンドの数を指定します。一番目のフォーマットを選択する場合、指定されたクラスはorg.zkoss.zk.ui.util.Initatorインターフェースを実装します。一度指定されると、クラスのインスタンスが作成されます。doInitメソッドはページを処理するまえに呼び出されます。

なお、doFinallyメソッドはページが処理されてから呼び出されます。doCatchメソッドは例外が発生したときに呼び出されます。こうして、このコマンドは初期化を制限しておらず、クリーンアップとエラー処理に使用します。

二つ目のフォーマットを選んだら、zscriptファイルは処理され、タイプがObject[]である引数argsと呼ばれる変数として渡されます。

Attribute Name

Description

class

[Optional]

org.zkoss.zk.ui.util.Initatorインターフェースが実装されたクラスの名前

ページ初期段階でdoInitメソッドが呼び出されます。(つまり、ページが処理される前) ページが処理された後では、doFinallyメソッドが呼び出されます。doCatchメソッドは処理中例外が発生した場合に呼ばれます。 .

zscript

[Optional]

ページ初期段階で処理されるスクリプトファイル。

arg0, arg1, arg2, arg3,...

[Optional]

引数の数を指定できます。1番目のフォーマットが使用されている場合、その数はdoInitメソッドに送信され、2番目のフォーマットが使用されている場合、argsの値として送信されます。メモ:一番目の引数はarg0、二番目はarg1、以下同様です。

variable-resolver コマンド

<?variable-resolver class="..."?>

zscriptインタプリタが不明な変数を解析する際に使用される変数リゾルバー(variable-resolver) を指定します。指定されたクラスはorg.zkoss.zk.scripting.VariableResolverインターフェースを実装します。

variable-resolverコマンドを使うことで多変数リゾルバーを指定することができます。遅く宣言されるほど、より高い優先度を持ちます。

以下はスプリングフレームワークとともにZKを使用するときの例です。スプリングフレームワークの中で宣言されたJava Beansを解析することで、それらを直接参照できます。

<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>

詳しくは Small Talk: ZK with Spring DAO and JDBC, Part II をご覧ください。

Attribute Name

Description

class

[Required]

クラス名はorg.zkoss.zk.scripting.VariableResolverインターフェースを実装します。

指定されたクラスのインスタンスは作成され、ページに追加されます。

import コマンド

<?import uri="..."?>

コンポーネント定義と他のZUMLページ中で定義されたイニシエーターを挿入します。つまり、指定されたページからcomponentinitコマンドを挿入します。Componentinit以外のコマンドは混乱を避けるために無視されます。

代表的な使用は一つのZUMLページの中でコンポーネントセットを定義します。そして、他のZUMLページはこのページを挿入し、コンポーネントの定義を共有します

<!-- special.zul: Common Definitions -->
<?init zscript="/WEB-INF/macros/special.zs"?>
<?component name="special" macro-uri="/macros/special.zuml" class="Special"?>
<?component name="another" macro-uri="/WEB-INF/macros/another.zuml"?>

特別なクラスがWEB-INF/macros/special.zsの中で定義されることを仮定します。

こうして、他のZUMLページは以下のようにコンポーネントの定義を共有することができます。

<?import uri="special.zul"?>
...
<special/><!-- you can use the component defined in special.zul -->

他のコマンドと違って、importコマンドは最上層に位置します。つまりルート要素と同じレベルです。

Attribute Name

Description

uri

[Required]

他のコマンドと違って、importコマンドは最上層に位置します。つまりルート要素と同じレベルです。

linkmeta コマンド

<?link [href="uri"] [ name0 =" value0 "] [ name1 =" value1 "] [ name2 =" value2 "]?><?meta [ name0 =" value0 "] [ name1 =" value1 "] [ name2 =" value2 "]?>

HTMLの中にはいわゆるヘッダー要素があります。現在HTML方式のクライアント(いわゆるブラウザ)はそれらを使用することができます。

ディベロッパーはこれらヘッダーコマンドを伴った属性を指定することができます。ZKはhrefコマンドのURIをエンコードするだけです(ExecutionsクラスのencodeURLメソッドの使用により)。ZKは他のすべての属性を直接クライアントへ発信します。

これらヘッダーコマンドは主要なZULページにのみ有効です。つまり、他のページ又はサーブレットに含まれているページである場合、ヘッダーコマンドは無視されます。また、ページがzhtmlファイルである場合も無視されます。

<?link rel="alternate" type="application/rss+xml" title="RSS feed"
 href="/rssfeed.php"?><
?link rel="shortcut icon" type="image/x-icon" href="/favicon.ico"?>

<window title="My App">
   My content
</window>


[33] 言語拡張については the Component Development Guideをご覧ください。