読者です 読者をやめる 読者になる 読者になる

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

Java

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

Clickは、MVCを無視したフレームワークです。JSPを使わず、Velocityを使います。

click.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<click-app charset="UTF-8">
  <pages package="webapp.page" />
</click-app>

pagesタグのpackage属性にページクラスのベースとなるパッケージを指定します。

InputPage.java

package webapp.page;

import org.apache.click.Page;
import org.apache.click.control.Form;
import org.apache.click.control.Submit;
import org.apache.click.extras.control.IntegerField;
import org.apache.click.util.Bindable;

public class InputPage extends Page {

    private static final long serialVersionUID = 1L;

    @Bindable
    protected Form form = new Form();

    private IntegerField arg1 = new IntegerField("arg1", "arg1:", true);
    // 最後のtrue は、必須かどうか。

    private IntegerField arg2 = new IntegerField("arg2", "arg2:", true);

    public InputPage() {
        form.add(arg1);
        form.add(arg2);
        form.add(new Submit("submit", "サブミット", this, "onSubmit"));
    }

    public boolean onSubmit() {
        if (!form.isValid()) {
            return true;
        }

        ResultPage resultPage = getContext().createPage(ResultPage.class);
        
        resultPage.result = Integer.valueOf(arg1.getValue())
                + Integer.valueOf(Integer.valueOf(arg2.getValue()));

        setForward(resultPage);
        return true;
    }
}

適当に書いてみたんですが、もっとシンプルな方法があったら御教授ください。

ResultPage.java

package webapp.page;

import org.apache.click.Page;

public class ResultPage extends Page {

    private static final long serialVersionUID = 1L;

    public Integer result;

    public ResultPage() {
    }
}

input.htm

<!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>input</title>
  <link rel="stylesheet" type="text/css" href="style.css"></link>
  $imports
</head>
<body>
  $form
</body>
</html>

$form って書くだけ!
マニュアルでレイアウトしたくなったとき面倒そう。

result.htm

<!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>result</title>
  <link rel="stylesheet" type="text/css" href="style.css"></link>
  $imports
</head>
<body>
  result: $format.html($result)
</body>
</html>

Click Examplesのサイトが、HTMLエスケープしてないんでXSS。。
他のフレームワークとは違った面白さがあるフレームワークだと思いました。

以上