Documentation
Appendix 2. JavaScript Tips
Java のクラスを使う (↑目次へ)
Java のクラスは、java.lang.String
や java.util.ArrayList
のようにパッケージが "java.
" で始まるクラスであれば、完全修飾名をそのまま書くだけで利用できます。しかしそれ以外のパッケージ ("org.
" や "com.
" など) の場合、先頭に "Packages.
" を付ける必要があります。
例: var list = new java.util.ArrayList(); var myClass = new Packages.org.example.MyClass();
例外を処理する (↑目次へ)
JavaScript にも try ~ catch 構文はありますので、Java で発生した例外を JavaScript で処理することもできます。Java でアプリケーションを作るときには Java 内で処理するでしょうから、デバッグ時には役立つかもしれません。
var caught = ""; try { var list = myLogic.findByName(name); } catch (e) { caught = e; } <m:write m:id="error" value="${ caught }" />
変数宣言時の注意 (↑目次へ)
※1.1.9 でこの問題は解消しました。ただしコードの読みやすさやメモリ効率、変数参照時のパフォーマンスを確保するためには、適切な位置で var を宣言するべきということは変わりません。
JavaScript では、ローカル変数を宣言するには var を使います。beforeRender や exec プロセッサでローカル変数を宣言した場合、この変数は描画が終わるまで有効です。beforeRender や exec プロセッサはそれ自身のスコープを持たないためです。
var foo = "bar";
もし一度も宣言されていない変数名に対して var
を使わずに変数へ代入した場合、グローバル変数とでもいうべき状態になってしまいます。そうなった変数は、(Mayaa では) Web アプリケーション内で共通に利用されます。
意図してこの状態にしたのでなければ、見つかりにくいバグとなってしまいますので、変数の宣言時は必ず var
を使うようにし、そのスコープを意識するようにしてください。(初回アクセスとそれ以降とで動作が変わる、他のユーザの情報が見える、というような現象が起きる可能性があります)
<m:beforeRender><![CDATA[ // この時点で foo が無い場合 foo = "bar"; // Web アプリケーション内共通になってしまう var foo1 = "bar1"; // このページのレンダリングが終われば無くなる function greeting() { var message = "hello"; // この function を抜ければ無くなる java.lang.System.out.println(message); } ]]></m:beforeRender> <m:write m:id="message" value="${ foo1 }" />