-hangman-solo

Maya-Strutsの簡単なサンプルだったHangmanサンプルを、Mayaのみで書きました。SVNにコミットしてあります。まず、送信フォームのテンプレート画面。

<html>
<body>
  <p id="insertError" class="error">Please select</p>
  <form id="form" method="POST" action="guess.html">
    <table>
        <tr>
        <td><input type="radio" 
          name="misses" value="10"/></td>
        <td>Easy game</td>
      </tr>
      <tr>
        <td><input type="radio"
          name="misses" value="5"/></td>
        <td>Medium game</td>
      </tr>
      <tr>
        <td><input type="radio"
          name="misses" value="3"/></td>
        <td>Hard game</td>
      </tr>
      <tr>
        <td></td>
        <td><input type="submit" value="Play!"></td>
      </tr>
    </table>
  </form>
</body>
</html>

送信フォーム画面の.mayaファイル。m:echoプロセッサの使い方が新味です。

<?xml version="1.0" encoding="iso-8859-1"?>
<m:maya xmlns:m="http://maya.seasar.org">
  <m:beforeRender>
    session.newAttribute(
      "game", Packages.org.seasar.maya.sample.hangman.HangmanGame);
  </m:beforeRender>
  <m:write m:id="insertError"
    m:rendered="true" m:value="${ game.lastError }"/>
  <m:echo m:id="form">
    <m:attribute name="action" value="startAction.maya"/>
  </m:echo>
</m:maya>

Strutsアクションを代替する.maya。JavaScriptで普通にかけます。最後にforwardしてます。CDATAも使えますので、ハンドエスケープしなくてもOKです。

<?xml version="1.0" encoding="iso-8859-1"?>
<m:maya xmlns:m="http://maya.seasar.org">
  <m:beforeRender>
    session.newAttribute(
      "game", Packages.org.seasar.maya.sample.hangman.HangmanGame);
    game.lastError = "";
    var misses = param.misses;
    <![CDATA[
      if(misses > 0) {
        game.start(misses);
        forward("guess.html");
      } else {
        game.lastError = "Please select a game difficulty.";
        forward("index.html");
      }
    ] ]>
  </m:beforeRender>
</m:maya>

ちょっと目を引くのは、Javaクラスを指定するのに、「Packages」を用いてることですが、これはRhinoの機能です。このPackagesは侮れない機能がちょこまかあるので、特に手を入れずにそのまま使うことにしています。