uzr tech memo

2009-11-22

SAStrutsまとめ

| 21:12

SAStruts+S2JDBCアプリケーションを構築するに当たって前調べしたことを纏めてあります。基本的なことからアーキテクトまで広く利用できるようなリンク集&コメントです。

種類インスタンス定義自動バインディングインターフェース抽象クラス
Actionrequestauto対象外対象外
Serviceprototypeauto有効有効
Dtorequest無効対象外対象外
Daoprototypeauto有効有効
    action.AddAction
    ⇒/ContextRoot/add/

    action.add.IndexAction
    ⇒/ContextRoot/add/
    s:formは/ContextRoot/add/という風にしか生成してくれない
    アクションは、複数の実行メソッド を持つことができ、
    通常は、1ユースケースを1アクションにマッピングします。
    複数の画面で構成される意味のある単位をユースケースだと、捉えればいいでしょう。
    via http://dbviewer.blogspot.com/2008/06/sastruts11action.html
    • Action命名規約
      • 上記の理由から1Actionに1画面しかない場合でも複数画面があるような命名にする。
    • プロパティについて
      • publicでメンバ変数を設定してしまうと、リクエストでパラメータが渡ってきて、名前が一致した場合にDIしてしまうので、メンバはprotectedで宣言する。DIしたいメンバは@ResourceAnnotationで指定。
    • @Resource Annotation
      • サーブレットコンテナに対しリソース注入の要求を行ってくれる。web.xmlの<resource-ref><env-ref><resource-env-ref>と同じ動き。DI用のフィールドは、protectedにして、@Resourceをつけることが推奨になるそうです。
 HttpSession session =
            (HttpSession) SingletonS2ContainerFactory
                .getContainer()
                .getExternalContext()
                .getSession();
  • ActionForm
    • publicフィールドにする。(SAStrutsが格納してくれる)
    • フィールドはすべてStringにしておく。
    • HTTPプロトコルとの相性が良い。Integer(Object)にしておくと、数字以外の文字がはいったときにエラーになり値が格納されないので。
    • 確認画面ではActionFormから値を出力する。
      • ActionFormに下記を設定
@Component(instance = InstanceType.SESSION)
      • セッションからActionFormを削除するタイミングが必要なのでActionに以下を指定する。メソッドの実行終了時にActionFormからデータを削除してくれます。
removeActionForm = true
  • JSPファイルについて
    • jsp include
      • SAStrutsでは個々にjspをインクルードするのではなく、web.xmlでインクルードさせています。
    <jsp-config>
    	<jsp-property-group>
    		<url-pattern>*.jsp</url-pattern>
    		<el-ignored>false</el-ignored>
    		<page-encoding>UTF-8</page-encoding>
    		<scripting-invalid>false</scripting-invalid>
    		<include-prelude>/WEB-INF/view/common/common.jsp</include-prelude>
    	</jsp-property-group>
    </jsp-config>
      • amaterasを利用している場合はエラーが出るので、プロジェクトの「プロパティ」-「amateras」-「ルート」に「/src/main/webapp」を記載してEclipse再起動すればOKです。
    • selectリスト
      • Enumで構築すべきか。strutsのLabelValueBeanも使いたかったけど、Actionがstrutsに依存するのが嫌で辞めた。

    • S2AbstractServiceを用いたAction-Service-Logicパターン