SAStrutsを勉強してみる (2) - ActionForm -
StrutsにあるAction Form Beansの機能っぽいのを使うには@ActionFormアノテーションを使えば良いらしい
Sample1Action.java
package sample.action;
import javax.annotation.Resource;
import org.seasar.struts.annotation.ActionForm;
import org.seasar.struts.annotation.Execute;
import org.seasar.struts.enums.SaveType;
import org.seasar.struts.util.ResponseUtil;
import sample.form.Sample1Form;
public class Sample1Action {
@ActionForm
@Resource
protected Sample1Form sample1Form;
@Execute(validator = false, removeActionForm = true)
public String index() {
return "index.jsp";
}
@Execute(
input = "/sample1?redirect=true",
saveErrors = SaveType.SESSION,
redirect = true
)
public String submit() {
int num = Integer.parseInt(sample1Form.num);
return "show/" + num;
}
@Execute(validator = false, urlPattern = "show/{num}")
public String doShow() {
ResponseUtil.write("num: " + sample1Form.num, "text/plain");
return null;
}
}
Sample1Form.java
package sample.form;
import java.io.Serializable;
import org.seasar.framework.container.annotation.tiger.Component;
import org.seasar.framework.container.annotation.tiger.InstanceType;
import org.seasar.struts.annotation.IntegerType;
import org.seasar.struts.annotation.Required;
// インスタンス管理をセッションで管理出来るらしい
@Component(instance = InstanceType.SESSION)
public class Sample1Form implements Serializable {
private static final long serialVersionUID = 1L;
@Required(target = "submit")
@IntegerType
public String num;
public String getNum() {
return num;
}
}
JSPで値を参照する場合等にはゲッターメソッドが必要な模様。あとは前回でもやったようにフォームで必要なフィールドに@Required等のアノテーションを付ける。で実行メソッドによって必要なフォームのパーツ違う場合には@Requiredアノテーションのtarget引数にメソッド名を指定すれば良い。
WEB-INF/views/sample1/index.jsp
<%@ page pageEncoding="UTF-8" %>
<html>
<body>
<s:form>
<%--
// Sample1Formを参照する。 この際にアクセスするプロパティにはゲッターメソッドが必要な模様。又、今回はindexメソッドの@ExecuteアノテーションでremoveActionForm = trueをしているので参照できない (エラーにはならず何も出てこない)
${sample1Form.num}
--%>
<html:text property="num" />
<input type="submit" name="submit" value="send" />
</s:form>
<html:errors />
</body>
</html>
っていう感じ。<html:text property="">などでActionFormなプロパティを参照できる。