- PR -

unspecifiedメソッドから別のActionメソッドを呼ぶ場合

1
投稿者投稿内容
Masayuki2501
常連さん
会議室デビュー日: 2006/01/02
投稿数: 25
投稿日時: 2006-07-08 18:12
こんにちは。

StrutsのLookupDispatchActionを用いてActionメソッドを用いる場合、
パラメータとして何も渡ってこない場合、unspecifiedメソッドを用いると思います。

このunspecifiedメソッドから同一クラス内の別Actionメソッドを呼ぶ場合の動作についてお尋ねします。

以下のようなコードの場合、unspecifiedメソッドからsucessメソッドを呼んでいます。
successメソッドを呼んだ場合、successメソッド自身がforwardしています。
ただ、unspecifiedメソッドも戻り値として、ActionForwardが必要なので、
自分自身でも(呼ばれるはずのない?)forwardをしています。

このunspecifiedメソッドのforwardは呼ばれることはないのでしょうか?
また、このような場合のコーディングの仕方としては、以下のような感じでよいのでしょうか?


/* unspecifiedメソッドから呼ばれる */
public ActionForward success(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
・・・

return mapping.findForward("success");
}

/* パラメータが渡ってこない場合 */
public ActionForward unspecified (ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {

success(mapping, from, request, response);
return mapping.findForward("success");
}
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-07-09 02:40
LookupDispatchActionのやっている事は、executeメソッドで、
パラメータの内容を元に別のメソッドに処理を要求して、
その結果(ActionForward)をexecuteメソッドの戻り値として返しています。

結論としては、パラメータがない場合、
unspecifiedメソッドの戻り値がexecuteメソッドの戻り値として使用されます。

unspecifiedメソッドからsuccessメソッドを実行する場合、
successメソッドの戻り値を返したければ、それでもOKですし、
別のActionForwardでも構いません。
あくまでreturn xxx;の内容がexecuteメソッドに伝わります。

引用:

以下のようなコードの場合、unspecifiedメソッドからsucessメソッドを呼んでいます。
successメソッドを呼んだ場合、successメソッド自身がforwardしています。


successメソッドはActionForwardのインスタンスを返しているだけで、フォワードしていません。
フォワードの処理は、コントローラがアクションの戻り値を利用してforward/redirectを行います。

successメソッドが値を返した時点ではフォワードされるわけではなく、
successメソッドを呼び出したexecuteメソッドに値が渡され、
そのexecuteメソッドがコントローラに値を返した時にフォワードされます。

ですので、unspecifiedメソッドからsuccessメソッドを実行したところで、
戻されるActionForwardが何であっても、フォワードされるわけではなく、
unspecifiedメソッドが返した値でフォワードされます。
Masayuki2501
常連さん
会議室デビュー日: 2006/01/02
投稿数: 25
投稿日時: 2006-07-09 15:22
ご丁寧に解説していただきありがとうございました。

ActionForwardのインスタンスを戻しているだけで、
実際にforwardをしているわけではないということがよくわかりました。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)