T2Framework 0.61も比較してみる

WicketとJSF 2.0をくらべてみると同じ動きと結果になるようにT2Frameworkでも試してみた。

テンプレート

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>T2で計算</title>
    </head>
    <body>
        <form action="calc" method="post">
            <input type="text" name="data1" value="${form.data1}"/>
            <input type="submit" value="+" name="add"/>
            <input type="submit" value="−" name="sub"/>
            <input type="text" name="data2" value="${form.data2}"/><c:out value="${form.result}"/>
        </form>

    </body>
</html>


ページクラス

package t2;

import javax.servlet.http.HttpServletRequest;
import org.t2framework.t2.annotation.composite.POST;
import org.t2framework.t2.annotation.core.ActionParam;
import org.t2framework.t2.annotation.core.Default;
import org.t2framework.t2.annotation.core.Form;
import org.t2framework.t2.annotation.core.Page;
import org.t2framework.t2.navigation.Forward;
import org.t2framework.t2.spi.Navigation;


@Page("/calc")
public class CalcPage {
    @Default
    public Navigation index(){
        return Forward.to("index.jsp");
    }

    @POST
    @ActionParam("add")
    public Navigation addAction(@Form CalcForm form ,HttpServletRequest request){
        form.result = form.data1 + form.data2;

        request.setAttribute("form", form);
        return Forward.to("index.jsp");
    }

    @POST
    @ActionParam("sub")
    public Navigation subAction(@Form CalcForm form ,HttpServletRequest request){
        form.result = form.data1 - form.data2;

        request.setAttribute("form", form);
        return Forward.to("index.jsp");
    }

    public static class CalcForm {
        Integer data1;
        Integer data2;
        Integer result;

        public Integer getData1() {
            return data1;
        }

        public void setData1(Integer data1) {
            this.data1 = data1;
        }

        public Integer getData2() {
            return data2;
        }

        public void setData2(Integer data2) {
            this.data2 = data2;
        }

        public Integer getResult() {
            return result;
        }

        public void setResult(Integer result) {
            this.result = result;
        }

    }
}

環境はサイトにあるドキュメントを利用して一から構築。

T2はアクションベースではあるが、ちゃんとどのボタンが押されたかの判別ができているのがわかると思う。
他のフレームワークと比較できるようにフォームでマッピングした。



ただ、コンバージョンでエラーが出た場合の処理がどうにもかけなかった。

ユーザーズガイドによるとErrorInfoで取れるとあったのだが、こいつは常にnullがかえってくるようだ。javadocにもnullが返る場合もあるとあったが、このへんはどう設定すればいいのだろうか。

[追記]
環境を1から作ったが上は再現しなかった。環境によるのかも?調べる必要あり。


あとNetbeansでやる場合、ソースはライブラリに登録しないほうがよいようだ。英文と日本語のまざったドキュメントを表示しようとして文字化けしてしまう。文字化けならまだいいほうで、そのままJavadocのパースに失敗すると補完時にJavadocウインドウが表示されないことも(おかしくはならないが)。

ソースをはずしてドキュメントのみにすると解決するが、そのかわりソースには飛べなくなってしまう。通常T2本体のソースを見たいということはないと思うので大丈夫だとは思うが。

ソース内のドキュメントのほうが外部Javadocより優先順位高いって前からだったっけ?この不具合6.5と6.7で確認した。たしか標準APIではソースよりJavadocのほうが優先順位高いと思ったけど。