SAStruts(Super Agile Struts)はSeasarプロジェクトのひとつで、Apache Strutsを改良したWebアプリケーションフレームワークです。この記事では入門者向けにSAStrutsの使い方をご紹介します。
SAStrutsはMVCモデルのアーキテクチャに基づいている。
MVC | SAStruts |
---|---|
Model | エンティティ |
View | JSP |
Controller | アクション |
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は、次に示すカスタムタグを使用できる。
Tag | Description |
---|---|
<s:form> | <form>タグを出力する。 |
<s:link> | <a>タグを出力する。 |
<s:submit> | <input type="submit">タグを出力する。 |
SAStrutsのJSPは、次に示すファンクションを使用できる。
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のアクションやエンティティは、次に示すアノテーションを使用できる
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 | 必須チェック |
ActionFormは、アクションフォームを指定するためのアノテーションである。
@ActionForm
protected RegisterForm registerForm;
org.seasar.struts.annotation.Excecuteは、実行メソッドであることを示すアノテーションである。
@Execute[(option = value ...)]
検証結果が失敗だった場合の遷移先。
検証メソッドの名前。複数のメソッド名を指定する場合はカンマで区切る。
検証用のアノテーションを有効にするかどうか。
値 | 説明 |
---|---|
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()
{
// バリデーション処理
}
}
バイト長の最大値を指定するアノテーション。
@Msg(key="errors.maxbytelength")
@Maxbytelength(
maxbytelength=200,
msg=@Msg(key="errors.maxbytelength),
target="register",
arg0=@Msg(key="備考"),
arg1=@Arg(key="100", resource=false)
)
public String remarks;
文字列長の最大値を指定するアノテーション。
@Msg(key="errors.maxlength")
@Maxlength(
maxlength=10,
msg=@Msg(key="errors.maxlength),
target="register",
arg0=@Msg(key="名前", resource=false),
arg1=@Arg(key="10", resource=false)
)
public String name;
必須チェック用のアノテーション
@Msg(key="errors.required")
。
@Required(@Msg(key="errors.required", arg0=@Arg(key="名前", resource=false), target="register""))
public String name;
アクションメッセージ用の例外
ActionMessagesException(String key, Object... values)
ActionMessagesException(String key, boolean resource)