SAStruts (Super Agile Struts)

SAStruts(Super Agile Struts)はSeasarプロジェクトのひとつで、Apache Strutsを改良したWebアプリケーションフレームワークです。この記事では入門者向けにSAStrutsの使い方をご紹介します。

SAStrutsはMVCモデルのアーキテクチャに基づいている。

MVC SAStruts
Model エンティティ
View JSP
Controller アクション

JSP

SAStrutsでは、MVCモデルのViewに相当する部分をJSPとして作成する。JSPを配置する起点となる場所は、配備記述子ファイル(webapp/WEB-INF/web.xml)のcontext-param要素にパラメータ名sastruts.VIEW_PREFIXとして記述する。

web.xmlの例を示す。

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<context-param>
  <param-name>sastruts.VIEW_PREFIX</param-name>
  <param-value>/WEB-INF/view</param-value>
</context-param>
</web-app>

上記の例では、/WEB-INF/viewの下にJSPファイルを配置する。また、/WEB-INF/view下に任意のディレクトリ(フォルダ)を作成して、そこにJSPファイルを配置してもよい。

JSPの例を示す。

/WEB-INF/view/index.jsp

<html>
<head>
  <title>Hello, world!</title>
</head>
<body>
  <h1>Hello, world!<h1>
</body>
</html>

カスタムタグ

SAStrutsのJSPは、次に示すカスタムタグを使用できる。

SAStrutsのカスタムタグ
Tag Description
<s:form> <form>タグを出力する。
<s:link> <a>タグを出力する。
<s:submit> <input type="submit">タグを出力する。

ファンクション

SAStrutsのJSPは、次に示すファンクションを使用できる。

SAStrutsのファンクション
Function Description
f:url コンテキストルートを自動的に補完する
f:h HTMLエスケープ
f:u URLエンコーディング
f:br 改行を<br />タグに変換する。
f:nbsp 半角スペースをそのまま表示
f:date 日付をフォーマットして表示
f:number 数値をフォーマットして表示
f:label 任意のオブジェクトの値を表示

アクション

SAStrutsでは、MVCモデルのControllerに相当する部分をアクションと呼ぶ。アクションはPOJO (Plain Old Java Object)であり、SAStrutsが提供している何らかのクラスを継承する必要はない。

アクションクラスは、Webブラウザからのリクエストに応じて起動されるクラスである。アクションクラスには、少なくともひとつの実行メソッドが必要である。実行メソッドにはorg.seasar.struts.annotation.Excecuteアノテーションを付ける。アクションクラスのクラス名には、Actionという接尾辞を付ける。

アクションクラスの例を示す。

import org.seasar.struts.annotation.Excecute;

public class LoginAction {

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

}

ルートパッケージがmypackageの場合、http://itref.fc2web.com/mypackage/login/indexというURLにリクエストが来ると、LoginActionクラスのindexメソッドが呼び出される。http://itref.fc2web.com/mypackage/login/authというURLにリクエストが来ると、LoginActionクラスのauthメソッドが呼び出される。また、http://itref.fc2web.com/mypackage/loginというURLにリクエストが来た場合、メソッド名が指定されていないが、この場合はindexメソッドが呼び出される。

エンティティ

SAStrutsでは、MVCモデルのModelに相当する部分をエンティティと呼ぶ。エンティティはPOJO (Plain Old Java Object)であり、SAStrutsが提供している何らかのクラスを継承する必要はない。

アノテーション

SAStrutsのアクションやエンティティは、次に示すアノテーションを使用できる

SAStrutsのアノテーション
Annotation type Description
org.seasar.struts.annotation.ActionForm アクションフォーム
org.seasar.struts.annotation.Excecute 実行メソッド
org.seasar.struts.annotation.Maxbytelength バイト長の最大値
org.seasar.struts.annotation.Maxlength 文字列長の最大値
org.seasar.struts.annotation.Required 必須チェック

org.seasar.struts.annotation.ActionForm

ActionFormは、アクションフォームを指定するためのアノテーションである。

@ActionForm
protected RegisterForm registerForm;

org.seasar.struts.annotation.Excecute

org.seasar.struts.annotation.Excecuteは、実行メソッドであることを示すアノテーションである。

@Execute[(option = value ...)]
input

検証結果が失敗だった場合の遷移先。

validate

検証メソッドの名前。複数のメソッド名を指定する場合はカンマで区切る。

validator

検証用のアノテーションを有効にするかどうか。

説明
true 有効(デフォルト値)。inputも指定する必要がある。
false 無効

@Executeアノテーションの使用例

import javax.annotation.Resource;
import org.seasar.struts.annotation.ActionForm;
import org.seasar.struts.annotation.Execute;

public class RegisterAction
{
  @ActionForm
  @Resource
  protected RegisterForm registerForm;

  @Execute(validation=true, validate="validate", input="register.jsp")
  public String register()
  {
      // 処理
  }
}

public class RegisterForm implements Serializable
{
  public ActionMessage validate()
  {
      // バリデーション処理
  }
}

org.seasar.struts.annotation.Maxbytelength

バイト長の最大値を指定するアノテーション。

maxbytelength
バイト長の最大値。必須。
msg
検証が失敗した場合のメッセージ。デフォルト値は @Msg(key="errors.maxbytelength")
arg0
メッセージの最初の引数。デフォルト値はプロパティ名。
arg1
メッセージの2番目の引数。デフォルトはmaxbytelengthで指定した値。
target
検証の対象にするメソッド名。
@Maxbytelength(
  maxbytelength=200,
  msg=@Msg(key="errors.maxbytelength),
  target="register",
  arg0=@Msg(key="備考"),
  arg1=@Arg(key="100", resource=false)
)
public String remarks;

org.seasar.struts.annotation.Maxlength

文字列長の最大値を指定するアノテーション。

maxlength
文字列長の最大値。必須。
msg
検証が失敗した場合のメッセージ。デフォルト値は @Msg(key="errors.maxlength")
arg0
メッセージの最初の引数。デフォルト値はプロパティ名。
arg1
メッセージの2番目の引数。デフォルトはmaxlengthで指定した値。
target
検証の対象にするメソッド名。
@Maxlength(
  maxlength=10,
  msg=@Msg(key="errors.maxlength),
  target="register",
  arg0=@Msg(key="名前", resource=false),
  arg1=@Arg(key="10", resource=false)
)
public String name;

org.seasar.struts.annotation.Required

必須チェック用のアノテーション

msg
検証が失敗した場合のメッセージ。デフォルト値は @Msg(key="errors.required")
arg0
メッセージの最初の引数。デフォルト値はプロパティ名。
target
検証の対象にするメソッド名。複数ある場合はカンマで区切る。
@Required(@Msg(key="errors.required", arg0=@Arg(key="名前", resource=false), target="register""))
public String name;

例外

org.seasar.struts.exception.ActionMessagesException

アクションメッセージ用の例外

コンストラクタ

ActionMessagesException(String key, Object... values)
ActionMessagesException(String key, boolean resource)
key
キー
values
値の配列
resource
リソースかどうか