- - PR -
unspecifiedメソッドから別のActionメソッドを呼ぶ場合
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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"); } | ||||
|
投稿日時: 2006-07-09 02:40
LookupDispatchActionのやっている事は、executeメソッドで、
パラメータの内容を元に別のメソッドに処理を要求して、 その結果(ActionForward)をexecuteメソッドの戻り値として返しています。 結論としては、パラメータがない場合、 unspecifiedメソッドの戻り値がexecuteメソッドの戻り値として使用されます。 unspecifiedメソッドからsuccessメソッドを実行する場合、 successメソッドの戻り値を返したければ、それでもOKですし、 別のActionForwardでも構いません。 あくまでreturn xxx;の内容がexecuteメソッドに伝わります。
successメソッドはActionForwardのインスタンスを返しているだけで、フォワードしていません。 フォワードの処理は、コントローラがアクションの戻り値を利用してforward/redirectを行います。 successメソッドが値を返した時点ではフォワードされるわけではなく、 successメソッドを呼び出したexecuteメソッドに値が渡され、 そのexecuteメソッドがコントローラに値を返した時にフォワードされます。 ですので、unspecifiedメソッドからsuccessメソッドを実行したところで、 戻されるActionForwardが何であっても、フォワードされるわけではなく、 unspecifiedメソッドが返した値でフォワードされます。 | ||||
|
投稿日時: 2006-07-09 15:22
ご丁寧に解説していただきありがとうございました。
ActionForwardのインスタンスを戻しているだけで、 実際にforwardをしているわけではないということがよくわかりました。 ありがとうございました。 |
1