<zscript [language="Java"]>Scripting codes</zscript><zscript src="uri" [language="Java"]/>
例えば、Javaコードといったスクリプトコードを定義します、そうしてページが処理されるときインタープリットされます。スクリプトコードの言語はデフォルトでJavaです(下を見てください) 。language属性を使用することで異なった言語を選ぶことができます。
zscript要素は上に示したように二つのフォーマットがあります。初めのフォーマットはページ中に直接スクリプトコードを埋め込みます。二つ目のフォーマットはスクリプトコードを含んでいる外部のファイルを参照します。
Attribute Name |
Description |
---|---|
src |
[Optional][Default: none] スクリプトコードを含んでいるファイルのURIを指定します。指定されている場合、直接埋め込まれているように、スクリプトコードは読み込まれます。 src属性はブラウザとローカル依存URIをサポートしています。つまり、~と*を異なったコンテクストパス、ブラウザ、ローカル依存情報に割り当てます。より詳しくは国際化の章を参照してください メモ:ファイルには直接インタープリットできる選択言語のソースコードが必要です。エンコードはUTF-8でなければなりません。クラスファイルを指定しないように注意しましょう。(Aka.bytecodes) |
language |
[Optional][Default: Java or as specified in the page directive][Allowed Values: Java | JavaScript | Ruby | Groovy] かれているスクリプトコードの言語を指定します。 |
deferred |
[Optional][Default: false] 初めの延期されてない言語のzscriptコードの処理が必要になるまで、この要素の処理を延期するかどうかをきめられません。以下のHow to Defer the Evalucation セクションを参照してください。 |
if |
[Optional][Default: true] 要素を評価する条件を定義します。 |
unless |
[Optional][Default: false] 要素を評価しない条件を定義します。 |
ZKは初めのzscriptコードを処理する前、インタプリタを読み込みます。例えば、以下の例の中で、ユーザーがボタンをクリックするとき、Javaインタプリタは読み込まれます。
<button onClick="alert("Hi")"/>
一方で、zscript要素はページを読み込むときに評価される必要があるので、以下のZUMLページを読み込むとき、インタプリタは読み込まれます。
<window> <zscript> void add() { } </zscript> <button onClick="add()"/> </window>
インタプリタの読み込みを遅らせる場合は、deferredオプションにtrueを指定します。そうすると、ユーザーがボタンをクリックするまでは、インタプリタは読み込まれません。
<window> <zscript deferred="true"> void add() { } </zscript> <button onClick="add()"/> </window>
【ヒント】: unlessとsrcと if属性中で指定されたEL表記の評価は遅らせられます。
【ヒント】: インタプリタが読み込まれるまでに、コンポーネントがページからはずれたらzscriptコードは無視されます。例えば、前の例でウィンドウがページに属していないと判断された場合、延期されたzscriptはインタープリットされません。
一つのペー ジで複数のスクリプト言語を使うことができます。
<button onClick="javascript:do_something_in_js()"/> <zscript language="groovy"> do_something_in_Groovy(); </zscript>
スクリプト言語が指定されていない場合、Javaが想定されます。デフォルトのスクリプト言語を変更したい場合、page属性を以下のように使用します。
<?page zscriptLanguage="Groovy"?> <zscript> def name = "Hello World!"; </zscript>
ZKはJava, JavaScript,Ruby,Groovyをサポートしていますが、簡単に拡張することができます:
org.zkoss.zk.script は org.zkoss.zk.scriping.Interpreterインターフェースを実装するクラスを供給します。ネーム空間を操作する場合、直接実装する代わりに、org.zkoss.zk.scripting.util.GenericInterpreterクラスから得ることができます。また、インタプリタがBSF(Bean Scipring Framwork)をサポートしている場合、org.zkoss.scripting.bsh.BSFInterpreterクラスから得ることができます。
WEB-INF/zk.xml又はzk/config.xml中でスクリプト言語を宣言します。
<zscript-config> <language-name>SuperJava</language-name><!-- case insensitive -->
<interpreter-class>my.MySuperJavaInterpreter</interpreter-class>
</zscript-config>
WEB-INF/zk.xmlについての詳細は開発用リファレンスを参照ください。また、zk/config.xmlについてはComponent Development Guideを参照してください。