【SAStruts】基礎

ディレクトリ構成

全体構成
パス 説明
src/main/java/ javaのソースファイルが保存されているソースフォルダ
src/main/resources/ 設定ファイル等が保存されているソースフォルダ
src/main/webapp 公開用のファイルを保存するためのフォルダ(配下のWEB-INFを除く)
src/main/webapp/WEB-INF/view/ jspを保存するためのフォルダ
Javaフォルダ構成(src/main/java/)
パッケージ名 説明
action Actionクラスを保存するためのパッケージ
service Serviceクラスを保持するためのパッケージ
dto Dtoクラスを保存するためのパッケージ
entity entityクラスを保存するためのパッケージ
form ActionFormクラスを保持するためのパッケージ
utill utillクラスを保持するためのパッケージ
リソースフォルダ構成(src/main/resources/)
ファイル名 説明
app.dicon 他のdiconファイルをコンテナに登録するために読まれるファイル
application_ja.properties アプリケーション内で使用するメッセージ等を保存するファイル(日本語ロケーション)
application.properties アプリケーション内で使用するメッセージ等を保存するファイル
convention.dicon アプリケーションのネーミング規約を定義するファイル
creator.dicon ネーミング規約に基づいてコンポーネント定義を作成するCreatorを定義するファイル
customizer.dicon Creatorが作成したコンポーネント定義をカスタマイズするCustomizerを定義するファイル
env_ut.txt S2Unitを使った単体テスト用の環境を定義するファイル
env.txt 実行環境を定義するためのファイル
jdbc.dicon DBの接続先等の設定を記載するためのファイル
log4j.properties ログの出力を設定するためのファイル
s2container.dicon S2コンテナをカスタマイズするための設定を定義するファイル
s2jdbc.dicon S2JDBCの設定を記載するためのファイル

URLとActionの関係

・URLに紐づくActionクラスのメソッドが自動で実行される。
  例.http://localhost:8080/sa-struts-tutorial/addの場合
   ⇒「AddAction」クラスの「index()」メソッドが実行される
  例.http://localhost:8080/sa-struts-tutorial/add/testの場合
   ⇒「AddAction」クラスの「test()」メソッドが実行される
・実行するメソッドには「@Execute」をつける。
  パラメータのバリデータを実行する場合
   ⇒@Execute(validator = true, input = "index.jsp")
    ※inputにはエラー時に遷移する画面を指定。validator = trueは省略可能
  パラメータのバリデータを実行しない場合
   ⇒@Execute(validator = false)
・メソッドは引数は設定せず、戻り値は「String」で定義して遷移先のパスを返す。
  http://localhost:8080/sa-struts-tutorial/add/で実行したメソッドの戻り値がresult.jspの場合
   ⇒「WEB-INF->view->add->result.jsp」が開く

値の受け渡し

・画面のFormの値は「@ActionForm」をつけたフォームで受け取る。
・Formの変数はpublicで宣言する。getter/setterは不要。(privateでgetter/setterにしても良い)
・変数にアノテーションをつけてバリデータを実行(@Executeで指定)可能。
  @Required ⇒ 必須チェック
  @IntegerType ⇒ 数字チェック

DI

・クラス全般に「@Resource」をつける。@ResourceはDIする意味。
コンポーネントスキャン(DIコンテナに登録すること)の範囲は「convention.dicon」で管理。
・シングルトン?
 ⇒ SAStrutsはリクエスト単位で管理。問題なくクラス変数を使用できる

サンプル



Action

public class AddAction {

    public Integer result;

    @ActionForm   // Formにはこれをつける
    @Resource     // クラスはDIして使用する
    protected AddForm addForm;

    @Execute(validator = false)
    public String index() { 
        return "index.jsp";
    }

    @Execute(input = "index.jsp") // バリデータを実行する。エラー時にindex.jspを開く
    public String submit() { 
        result = Integer.valueOf(addForm.arg1) + Integer.valueOf(addForm.arg2);
        return "result.jsp";
    }
}

Form

public class AddForm {

    @Required
    @IntegerType
    public String arg1;

    @Required
    @IntegerType
    public String arg2;
}

jsp(入力画面)

<%@page pageEncoding="UTF-8"%>
<html>
<head>
<title>Tutorial: Add</title>
<link rel="stylesheet" type="text/css" href="${f:url('/css/sa.css')}" />
</head>
<body>

<h1>Tutorial: Add</h1>

<html:errors/>
<s:form>
<html:text property="arg1"/> +
<html:text property="arg2"/>
<input type="submit" name="submit" value="サブミット"/>
</s:form>
</body>
</html>

jsp(結果画面)

<%@page pageEncoding="UTF-8"%>
<html>
<head>
<title>Tutorial: Add</title>
<link rel="stylesheet" type="text/css" href="${f:url('/css/sa.css')}" />
</head>
<body>

<h1>Tutorial: Add</h1>

<html:errors/>
${f:h(arg1)} + ${f:h(arg2)}
= ${f:h(result)}<br />
</body>
</html>