いろんなJava Webフレームワークで同じ画面を作ってみる(Play!編)

いろんなJava Webフレームワークで同じ画面を作ってみる(Play!編)です。
お題は、こちら

このフレームワークは、他のフレームワークとは違った凄さがあります。
最初からこの企画に含めなかった自分は、バカでした。

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が渡されるので必須入力チェックにも引っかかり、必須エラーのメッセージも出てしまいます。誰か改善方法を教えてつかわさい。


以上