-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は侮れない機能がちょこまかあるので、特に手を入れずにそのまま使うことにしています。