SAStrutsまとめ

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

  • Action
    • URLルール
    action.AddAction
    ⇒/ContextRoot/add/

    action.add.IndexAction
    ⇒/ContextRoot/add/
    s:formは/ContextRoot/add/という風にしか生成してくれない
    アクションは、複数の実行メソッド を持つことができ、
    通常は、1ユースケースを1アクションにマッピングします。
    複数の画面で構成される意味のある単位をユースケースだと、捉えればいいでしょう。
    via http://dbviewer.blogspot.com/2008/06/sastruts11action.html
    • プロパティについて
      • publicでメンバ変数を設定してしまうと、リクエストでパラメータが渡ってきて、名前が一致した場合にDIしてしまうので、メンバはprotectedで宣言する。DIしたいメンバは@ResourceAnnotationで指定。
    • @Resource Annotation
      • サーブレットコンテナに対しリソース注入の要求を行ってくれる。web.xmlと同じ動き。DI用のフィールドは、protectedにして、@Resourceをつけることが推奨になるそうです。
    • Sessionオブジェクトの取得方法
      • Seasar2.4.35以降ならhotdeploy時もこのコードでOK。以前はNG
 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
    		false
    		UTF-8
    		false
    		/WEB-INF/view/common/common.jsp
    	
    
      • amaterasを利用している場合はエラーが出るので、プロジェクトの「プロパティ」-「amateras」-「ルート」に「/src/main/webapp」を記載してEclipseを再起動すればOKです。
    • selectリスト
      • Enumで構築すべきか。strutsのLabelValueBeanも使いたかったけど、Actionがstrutsに依存するのが嫌で辞めた。
    • S2AbstractServiceを用いたAction-Service-Logicパターン
      • Serviceクラスは、Entityに対して1:1に対応します(または不要)、複数のEntityを扱う場合にはLogicとしてまとめておいた方が良いかもですね。
      • http://d.hatena.ne.jp/dewa/20080707/1215400310