SAStrutsを勉強してみる (2) - ActionForm -

2012-10-03T00:00:00+00:00 Java SAStruts

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なプロパティを参照できる。

SAStrutsを勉強してみる (3) - S2JDBCを使う - SAStrutsを勉強してみる (1) - First Step -