いろんなJava Webフレームワークで同じ画面を作ってみる(SAStruts編)
いろんなJava Webフレームワークで同じ画面を作ってみる(SAStruts編)です。
お題は、こちら。
- 公式サイト: Super Agile Struts
- バージョン: 1.0.4-sp8
公式のチュートリアルにあるのとほぼ同じなんですが、計算結果は別画面に遷移して出力するようにしています。
セットアップは、doltengで簡単にできます。
SAStrutsは、S2Containerに依存します。
convention.dicon
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <component class="org.seasar.framework.convention.impl.NamingConventionImpl"> <initMethod name="addRootPackageName"> <arg>"webapp"</arg> </initMethod> </component> </components>
まずは、addRootPackageNameでベースとなるパッケージを指定します。
AddAction.java
アクションクラス。
package webapp.action; import javax.annotation.Resource; import org.seasar.struts.annotation.ActionForm; import org.seasar.struts.annotation.Execute; import webapp.form.AddForm; public class AddAction { public Integer result; @ActionForm @Resource protected AddForm addForm; @Execute(validator = false) public String index() { return "input.jsp"; } @Execute(input = "input.jsp") public String calculate() { result = Integer.valueOf(addForm.arg1) + Integer.valueOf(addForm.arg2); return "result.jsp"; } }
アクションクラスもフォームクラスもsetter,getter不要なので見た目はすっきりします。
リクエストパラメータは、アクションクラスのフィールドでも受け取れますが、フォームクラスを作るのが定石です。
フィールドresultは、出力オンリーなのでフォームクラスには作らず、アクションクラスに作ります。
個人的には、実行メソッドの戻り値の型は、Stringじゃなく特別な型だったらなーと思っています。
アクションクラス、フォームクラスともにPOJOです。ちなみに自分はPOJOに対するこだわりはないです。
AddForm.java
次はフォームクラス。
package webapp.form; import org.seasar.struts.annotation.IntegerType; import org.seasar.struts.annotation.Required; public class AddForm { @Required @IntegerType public String arg1; @Required @IntegerType public String arg2; }
リクエストパラメータは、Stringで受け取り、型変換はアクションクラスで実施します。
バリデーション用のアノテーションには、target属性が用意されており、検証対象となるメソッドを指定できるので良い感じです。
input.jsp
入力画面です。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>input</title> </head> <body> <html:errors/> <s:form> <html:text property="arg1"/><html:errors property="arg1"/><br/> +<br/> <html:text property="arg2"/><html:errors property="arg2"/><br/> <input type="submit" name="calculate"/> </s:form> </body> </html>
JSPは、JSTL + 素のStrutsのカスタムタグ + SAStrutsのELファンクション、カスタムタグで作る感じでしょうか。
素のStrutsで理解しておかなかければならないのは、カスタムタグくらいでしょう。
result.jsp
出力結果画面です。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>result</title> </head> <body> result: ${f:h(result)} </body> </html>
that's it.