includeコンポーネントは他のサーブレットによって生成された出力を含んでいます。サーブレットはJSF、JSPと他のZUMLページさえも含んでいるものです。
<window title="include demo" border="normal" width="300px"> Hello, World! <include src="/userguide/misc/includedHello.zul"/> <include src="/html/frag.html"/> </window>
他のプロパティのように、動的にsrc属性を変更してランタイムで異なったサーブレットからの出力を含むことができます。
含まれた出力が他のZUMLなら、開発者はまるでそれらが含まれているページであるかのように、含まれたページ中のコンポーネントへアクセスできます。
インクルードされたページに値を渡すには、二通りの方法があります。最初に、 query ストリングでそれを渡す方法です。
<include src="mypage?some=something"/>
そして、インクルードされたページ内で、 ServletRequest インターフェースか、 Execution インターフェースの getParameter メソッドを使用してアクセスできます。 EL 表記(インクルードされたページの)内で、param 変数を使用してアクセスします。しかし、 query ストリングで渡すことが出来るのは、ストリングタイプの値だけです。
${param.some}
別の方法としては、次のように ZUL の中の dynamic プロパティで setDynamicProperty メソッドを使用して、いわゆるダイナミックプロパティでどんな種類の値も渡すことができます。
<include src="mypage" some="something" another="${expr}"/>
ダイナミックプロパティで non-String-typed の値を渡すことができます。インクルードされたページ内で、 ServletRequest インターフェースか、 Execution インターフェースの getAttribute メソッドを使用してそれらにアクセスできます。 EL 表記(インクルードされたページの)内で requestScope 変数を使用してアクセスします。
${requestScope.some}
include コンポーネントが使用されて、ZUMLページを含めば、含まれたページはデスクトップの一部分です。しかし、含まれたページはリクエストが完全に処理されるまで、参照可能にはなりません。
つまり、ユーザーか、次のイベントサンプルのような、タイマーによって発生した中でのみ参照可能です。
その理由はZUL ページに含まれた include コンポーネントはレンダリング段階[46]で初めてページを読み込み始めるからです。一方で、zscriptはコンポーネント作成段階で処理されます。onCreateはイベント処理段階で処理されます。その二つは両方とも含まれる前に、実行されます。
<window onCreate="desktop.getPages()"> <!-- the included page not available --> <include src="/my.zul"/> <zscript> desktop.getPages(); //the included page not available yet </zscript> <button label="Hit" onClick="desktop.getPages()"/> <!-- Yes, the included page is available when onClick is received --> </window>
含まれたページページのinclude コンポーネントを調べたかったら、マクロコンポーネントがいい選択です。ZKユーザーインターフェースマークアップ言語章中のマクロコンポーネントセクションを参照してください。