Top > Java > Struts

業界デファクトスタンダードフレームワークのStrutsについて。

使わなくていいモノ Edit

  • DynaActionForm
    XMLに書くのもBeanを作るのも手間は変わらない。むしろXMLが肥大する。
  • DispatchAction, LookingDispatchAction
    日本語使えないのと面倒くさすぎるの。
  • global-exceptions
    Actionの中でcatchするので十分。

サンプルをEclipseプロジェクトとしてインポートする Edit

Strutsを勉強するには、まずStruts公式サイトにあるサンプルをダウンロードして眺めてみるといい。

そのサンプルをEclipseのプロジェクトしてインポートする方法。
http://www.jajakarta.org/struts/struts1.2/documentation/ja/target/faqs/eclipse.html

二重送信防止のための同期トークン(saveToken) Edit

http://muimi.com/j/jakarta/struts/struts5.html

Action内で入力のエラーをみつけたときにinputに戻るためには Edit

501 :デフォルトの名無しさん [] :2004/11/01(月) 14:24:14
Action内で入力のエラーをみつけたときにinputに戻るためには、どうするのがいいですか?
502 :デフォルトの名無しさん [↓] :2004/11/01(月) 14:38:39
>>501
return mapping.getInputForward();

Dispatch系Actionの使い分け Edit

1つのformでありながら送信ボタンが複数あるとき(作成、削除、編集など)、DispatchActionのサブクラスを使えば、1つのActionクラスで全ての処理に対応させることができる。

Action
 BaseAction
  DispatchAction
   LookupDispatchAction
   MappingDispatchAction
   EventDispatchAction
DispatchAction
クエリ文字列でActionクラスの中のメソッドを選択する。不便。
struts-config.xmlに次のように書く。
<action path="/saveSubscription"
 type="org.apache.struts.actions.DispatchAction"
 name="subscriptionForm"
 scope="request"
 input="/subscription.jsp"
 parameter="method"/> 
Actionクラスに次のようなメソッドを用意する。
public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception 
public ActionForward insert(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception 
public ActionForward update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception 
アクセスするURLは次のようになる。
http://localhost:8080/myapp/saveSubscription.do?method=update 
するとupdateメソッドが実行される。
LookupDispatchAction
MappingDispatchAction
1.2から。
public ActionForward create(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception 
public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception 
public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception 
public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception 
public ActionForward list(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception 
  <action path="/createSubscription"
          type="org.example.SubscriptionAction"
          parameter="create">
      <forward name="success" path="/editSubscription.jsp"/>
  </action>

  <action path="/editSubscription"
          type="org.example.SubscriptionAction"
          parameter="edit">
      <forward name="success" path="/editSubscription.jsp"/>
  </action>

  <action path="/saveSubscription"
          type="org.example.SubscriptionAction"
          parameter="save"
          name="subscriptionForm"
          validate="true"
          input="/editSubscription.jsp"
          scope="request">
      <forward name="success" path="/savedSubscription.jsp"/>
  </action>

  <action path="/deleteSubscription"
          type="org.example.SubscriptionAction"
          name="subscriptionForm"
          scope="request"
          input="/subscription.jsp"
          parameter="delete">
      <forward name="success" path="/deletedSubscription.jsp"/>
  </action>

  <action path="/listSubscriptions"
          type="org.example.SubscriptionAction"
          parameter="list">
      <forward name="success" path="/subscriptionList.jsp"/>
  </action>
EventDispatchAction
1.2.9から。便利。
   <action path="/saveSubscription"
           type="org.example.SubscriptionAction"
           name="subscriptionForm"
          scope="request"
          input="/subscription.jsp"
      parameter="save,back,recalc=recalculate,default=save"/>

参考:
http://asagiri.lady-luck.fool.jp/?eid=492207#sequel
http://d.hatena.ne.jp/hoso-kawa/20070224
http://struts.apache.org/1.3.8/apidocs/index.html

ビジネスロジッククラス設計の指針 Edit

  • Webアプリケーションから切り離しても使えるようにすること。javax.servlet.*のクラスをインポートしては駄目。したい場合は、その処理をActionクラスへ移すことを考える。
  • 普通のJavaBeanとして作る。
  • JavaBeanを受け取り、JavaBean(またはそのコレクション)を返すようにする。とはいってもActionFormからBeanにつめかえるのは面倒だと思う。

validationのやりかた Edit

validateメソッドを作る Edit

validation.xmlを書く Edit

xdocletでvalidation.xmlを生成する Edit

http://d.hatena.ne.jp/m383m/20071017/1192609868

●制限事項

  • Struts設定ファイル名はstruts-config.xmlと固定。
  • Validator検証設定ファイル名はvalidation.xmlと固定。
  • モジュールの分割やファイルの分割に対応していない。


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes