jp.terasoluna.fw.web.struts.actions
クラス DispatchAction

java.lang.Object
  上位を拡張 org.apache.struts.action.Action
      上位を拡張 jp.terasoluna.fw.web.struts.actions.ActionEx
          上位を拡張 jp.terasoluna.fw.web.struts.actions.DispatchAction

public class DispatchAction
extends ActionEx

フォワード先の振り分け処理を行う。

リクエストパラメータを用いて、遷移先を決定する。
Strutsが提供しているDispatchAction、LookupDispatchActionと仕様が異なるため、注意すること。

まず、リクエストパラメータキーの設定をBean定義ファイルで必要に応じて行う (デフォルト値は"event")。

下記に記した定義ファイルは リクエストパラメータのキーをcustom-eventに設定する例である。

Bean定義ファイルの設定

  <bean name="/dispatch" scope="prototype"
    class="jp.terasoluna.fw.web.struts.actions.DispatchAction">
    <property name="event">
      <value>custom-event</value>
    </property>
  </bean>
  

次に、遷移文字列を決定する。優先順位は次の通り。

  1. 上記で指定したリクエストパラメータキーの値のうち、 先頭に"forward_"がついているものについて、 "forward_"を取り除いた文字列
  2. リクエストパラメータキーの先頭に"forward_"が付いているものについて、 "forward_"を取り除いた文字列
  3. "default"固定 (event="XXXX"、"forward_XXXX"といった 存在し得ない不正な遷移先が指定された場合など)
上記の結果、遷移文字列が"#input" であったとき、struts-config.xmlのinput属性が遷移先となる。
"#input"ではないとき、struts-config.xmlのforward要素の内容により遷移先が決定する。

struts-config.xmlの設定

  <action path="/dispatch"
    name="_sampleForm"
    scope="session"
    input="/prev.jsp">
    <forward name="regist" path="/userRegist.do"/>
    <forward name="search" path="/userSearch.do"/>
    <forward name="update" path="/userUpdate.do"/>
    <forward name="decide" path="/prev.do"/>
    <forward name="default" path="/prev.do"/>
  </action>
 

JSPでの記述例

  ・・・
  <html:radio property="custom-event" value="forward_regist"/>
  <html:radio property="custom-event" value="forward_search"/>
  <html:radio property="custom-event" value="forward_update"/>
  <html:radio property="custom-event" value="forward_#input"/>
  <html:submit property="forward_decide" value="決定"/>
  <html:submit value="戻る"/>
  ・・・
  
リクエストパラメータの値に"forward_" + 論理フォワード名と定義する。

各操作を行った場合の遷移先は次の通り。

  1. 1番目のラジオボタンを押して決定を押下した場合は、 遷移文字列は"regist"、遷移先は"/userRegist.do"
  2. 4番目のラジオボタンを押して決定を押下した場合は、 遷移文字列は"#input"、遷移先は"/prev.do"
  3. ラジオボタンを選択せず、決定を押下した場合は、 遷移文字列は"decide"、遷移先は"/prev.do"
  4. 戻るを押下した場合、 遷移文字列は"default"、遷移先は"/prev.do"


フィールドの概要
 
クラス jp.terasoluna.fw.web.struts.actions.ActionEx から継承されたフィールド
FORWARD_TXTOKEN_ERROR
 
クラス org.apache.struts.action.Action から継承されたフィールド
defaultLocale, servlet
 
コンストラクタの概要
DispatchAction()
           
 
メソッドの概要
protected  org.apache.struts.action.ActionForward cancelled(org.apache.struts.action.ActionMapping mapping, org.apache.struts.action.ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
          リクエストにキャンセルフラグが設定されている場合の遷移先を 決定する。
protected  String doDetermineForward(Map params, String event)
          リクエストパラメータに基づいてフォワード先をディスパッチする。
 org.apache.struts.action.ActionForward doExecute(org.apache.struts.action.ActionMapping mapping, org.apache.struts.action.ActionForm form, javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res)
          フォワード先の振り分け処理を行う。
protected  boolean exists(Map params, String name)
          リクエストパラメータに、nameで指定した名称のパラメータが 存在しているかを判定する。
 void setEvent(String value)
          遷移先を表すプロパティ名を設定する。
 
クラス jp.terasoluna.fw.web.struts.actions.ActionEx から継承されたメソッド
addErrors, addMessages, execute, isSaveToken, isTokenCheck, processTokenCheck, setSaveToken, setTokenCheck
 
クラス org.apache.struts.action.Action から継承されたメソッド
addErrors, addMessages, execute, generateToken, getDataSource, getDataSource, getErrors, getLocale, getMessages, getResources, getResources, getServlet, isCancelled, isTokenValid, isTokenValid, resetToken, saveErrors, saveErrors, saveErrors, saveMessages, saveMessages, saveToken, setLocale, setServlet
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

DispatchAction

public DispatchAction()
メソッドの詳細

setEvent

public void setEvent(String value)
遷移先を表すプロパティ名を設定する。

パラメータ:
value - 遷移先プロパティ名

doExecute

public org.apache.struts.action.ActionForward doExecute(org.apache.struts.action.ActionMapping mapping,
                                                        org.apache.struts.action.ActionForm form,
                                                        javax.servlet.http.HttpServletRequest req,
                                                        javax.servlet.http.HttpServletResponse res)
フォワード先の振り分け処理を行う。

フォワード先を振り分けた後、サーバ閉塞通過フラグを 削除する。
実際の遷移先は、doDetamineForward()が決定している。

定義:
クラス ActionEx 内の doExecute
パラメータ:
mapping - アクションマッピング
form - アクションフォーム
req - HTTPリクエスト
res - HTTPレスポンス
戻り値:
遷移先情報

doDetermineForward

protected String doDetermineForward(Map params,
                                    String event)
リクエストパラメータに基づいてフォワード先をディスパッチする。 paramsがnullの場合は、デフォルトの文字列を返却する。

パラメータ:
params - リクエストパラメータ(マップ形式)
event - アクションマッピングに指定されたイベント名
戻り値:
振り分け先の論理フォワード名

exists

protected boolean exists(Map params,
                         String name)
リクエストパラメータに、nameで指定した名称のパラメータが 存在しているかを判定する。

パラメータ:
params - リクエストパラメータ(マップ形式)
name - リクエストパラメータ名
戻り値:
リクエストパラメータ名が存在しているならば true

cancelled

protected org.apache.struts.action.ActionForward cancelled(org.apache.struts.action.ActionMapping mapping,
                                                           org.apache.struts.action.ActionForm form,
                                                           javax.servlet.http.HttpServletRequest request,
                                                           javax.servlet.http.HttpServletResponse response)
リクエストにキャンセルフラグが設定されている場合の遷移先を 決定する。注意点として、ActionForwardはnullとして返却されるため、 キャンセル時の遷移先は、 このクラスを継承したクラスのオーバライドメソッドで実装する必要がある。

パラメータ:
mapping - アクションマッピング
form - アクションフォーム
request - HTTPリクエスト
response - HTTPレスポンス
戻り値:
アクションフォワード


Copyright © 2012. All Rights Reserved.