Documentation
2-2. 条件分岐とループ
簡単な制御として、条件分岐とループを使ってみましょう。「インストールしよう」で動作させた C:\tomcat\webapps\mayaa
の下に新しくファイルを追加します。
条件分岐を使う
条件を満たす場合のみ出力するサンプルを作ります。if.html
と、その設定を行う if.mayaa
を次のように作成します。
if.html
<html> <body> <span id="visible"> <span id="message">dummy message</span> </span> </body> </html>if.mayaa
<?xml version="1.0" encoding="UTF-8"?> <m:mayaa xmlns:m="http://mayaa.seasar.org"> <m:if m:id="visible" test="${ 1 == 1 }" /> <m:write m:id="message" value="Hello Mayaa!" /> </m:mayaa>
動作は Java の if 文と同じです。mayaa ファイルにある m:if
の test
を評価すると true
になりますので、ボディの span id="message"
が評価されて "Hello Mayaa!" と出力されます。
m:if
と m:write
は別々に書かれていることに注意してください。HTML 側では id="message"
のタグが id="visible"
のタグ子として書かれていますが、Mayaa 側は m:id
を持つタグが同列に並ぶように書きます。
ブラウザで http://localhost:8080/mayaa/if.html
にアクセスしてみましょう。
実行結果 (改行などは実際の実行結果と異なります)
<html>
<body>
Hello Mayaa!
</body>
</html>
test の内容が false
になるよう変更すると、"Hello Mayaa!" は表示されません。
if.html
<html> <body> <span id="visible"> <span id="message">dummy message</span> </span> </body> </html>if.mayaa
<?xml version="1.0" encoding="UTF-8"?> <m:mayaa xmlns:m="http://mayaa.seasar.org"> <m:if m:id="visible" test="${ 1 < 1 }" /> <m:write m:id="message" value="Hello Mayaa!" /> </m:mayaa> 実行結果 (改行などは実際の実行結果と異なります) <html> <body> </body> </html>
条件判定 test
の式で比較演算子 <
を <
と記述している点に注意してください。スクリプトを XML の属性として記述しますので、一部の記号をエスケープする必要があります。(< → < , > → > , & → &)
ループを使う
一部分を繰り返し出力するサンプルを作ります。for.html
と、その設定を行う for.mayaa
を次のように作成します。
for.html
<html> <body> <span id="loop"> <span id="message">dummy message</span> </span> </body> </html>for.mayaa
<?xml version="1.0" encoding="UTF-8"?> <m:mayaa xmlns:m="http://mayaa.seasar.org"> <m:for m:id="loop" init="${ var i = 0 }" test="${ i < 5 }" after="${ i++ }" /> <m:write m:id="message" value="Hello Mayaa!<br>" escapeXml="false" /> </m:mayaa>
動作は Java の for 文と同じです。mayaa ファイルにある m:for
は、最初に一度だけ init
を実行します。その後、test
を評価して結果が true
になるならボディを実行し、最後に after
を実行してから test
の評価に戻ります。(実行結果を見やすくするため、"Hello Mayaa!
" の後ろに <br>
を付け、タグをそのまま出力するよう escapeXml 属性を false に設定しています)
ブラウザで http://localhost:8080/mayaa/for.html
にアクセスしてみましょう。
実行結果 (改行などは実際の実行結果と異なります)
<html>
<body>
Hello Mayaa!<br>
Hello Mayaa!<br>
Hello Mayaa!<br>
Hello Mayaa!<br>
Hello Mayaa!<br>
</body>
</html>
結果として "Hello Mayaa<br>"
が 5 回出力されます。
初期化部 init
で宣言した変数 i
は、m:for
の範囲内、つまり span id="loop" を処理する間 で有効です。m:write
を使って i
の値を出力してみましょう。
for.html
<html> <body> <span id="loop"> <span id="message">dummy message</span> </span> </body> </html>for.mayaa
<?xml version="1.0" encoding="UTF-8"?> <m:mayaa xmlns:m="http://mayaa.seasar.org"> <m:for m:id="loop" init="${ var i = 0 }" test="${ i < 5 }" after="${ i++ }" /> <m:write m:id="message" value="${ i }<br>" escapeXml="false" /> </m:mayaa> 実行結果 (改行などは実際の実行結果と異なります) <html> <body> 0<br> 1<br> 2<br> 3<br> 4<br> </body> </html>
変数 i
の値が 1 ずつ増えていくのがわかります。