Top
2-2. 条件分岐とループ


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:iftest を評価すると true になりますので、ボディの span id="message" が評価されて "Hello Mayaa!" と出力されます。

m:ifm: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 &lt; 1 }" />

    <m:write m:id="message" value="Hello Mayaa!" />
</m:mayaa>
実行結果 (改行などは実際の実行結果と異なります)
<html>
<body>



</body>
</html>

条件判定 test の式で比較演算子 <&lt; と記述している点に注意してください。スクリプトを XML の属性として記述しますので、一部の記号をエスケープする必要があります。(< → &lt; , > → &gt; , & → &amp;)

ループを使う

一部分を繰り返し出力するサンプルを作ります。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 &lt; 5 }"
            after="${ i++ }" />

    <m:write m:id="message"
            value="Hello Mayaa!&lt;br&gt;" 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 &lt; 5 }"
            after="${ i++ }" />

    <m:write m:id="message"
            value="${ i }&lt;br&gt;" escapeXml="false" />
</m:mayaa>
実行結果 (改行などは実際の実行結果と異なります)
<html>
<body>
    0<br>
    1<br>
    2<br>
    3<br>
    4<br>
</body>
</html>

変数 i の値が 1 ずつ増えていくのがわかります。

Copyright (c) 2004-2009 the Seasar Foundation and others. all rights reserved.