いろんなJava Webフレームワークで同じ画面を作ってみる(Click編)
いろんなJava Webフレームワークで同じ画面を作ってみる(Click編)です。
お題は、こちら。
- 公式サイト: Apache Click
- バージョン: 2.2.0
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。。
他のフレームワークとは違った面白さがあるフレームワークだと思いました。
以上