いろんなJava Webフレームワークで同じ画面を作ってみる(Play!編)
いろんなJava Webフレームワークで同じ画面を作ってみる(Play!編)です。
お題は、こちら。
- 公式サイト: Home — Playframework
- バージョン: 1.1
このフレームワークは、他のフレームワークとは違った凄さがあります。
最初からこの企画に含めなかった自分は、バカでした。
Add.java
Controllerクラスです。
package controllers; import play.data.validation.Required; import play.mvc.Controller; public class Add extends Controller { public static void input() { render(); } public static void calculate( @Required Integer arg1, @Required Integer arg2) { if (validation.hasErrors()) { params.flash(); validation.keep(); input(); } else { Integer result = arg1 + arg2; render(result); } } }
フレームワークが、calculateメソッドで宣言されている引数名を利用してリクエストパラメータを渡すようです。リフレクションじゃできないはずなんでAPTでも使ってるのかなぁと思ったら、Javassistを使っているんですね(追記:APTはアノテーションつけないとはじまらないか)。
そしてさらに、renderメソッドの呼び出し部分なのですが、ここはフレームワークが渡されているローカル変数名を取得してるっぽい。そんことまでJavassitできちゃうんですか。使ったことないのでわからないのですが。。
input.html
入力画面です。
#{extends 'main.html' /} #{set title:'input' /} #{ifErrors} #{errors} <li>${error}</li> #{/errors} #{/ifErrors} <form action="@{Add.calculate}"> <input type="text" name="arg1" value="${flash.arg1}" />#{error 'arg1' /}<br/> + <br/> <input type="text" name="arg2" value="${flash.arg2}" />#{error 'arg2' /}<br/> <input type="submit" /> </form>
独自のHTMLテンプレートのようです。
result.html
結果出力画面です。
#{extends 'main.html' /} #{set title:'input' /} result: ${result}
デフォルトでHTMLエスケープされるっぽいのですが、エスケープしたくない場合は、どうすれば良いのでしょう。。
message
メッセージ等の定義ファイルです。
validation.required=%sは必須です。
リクエストパラメータをIntegerに変換できなかった場合のエラーメッセージの定義の仕方がわからない。。
自分の書いたコードですが、問題がありまして、テキストボックスに"aaa"とか入力した場合、Integerへの変換でエラーになり、nullが渡されるので必須入力チェックにも引っかかり、必須エラーのメッセージも出てしまいます。誰か改善方法を教えてつかわさい。
以上