4

私は今日出くわしMultiActionControllerました、そしてそれが何のために使われるのか私にはわかりません...Springのドキュメントで、それは言います

複数のリクエストタイプを同じクラスで処理できるようにするコントローラーの実装。このクラスのサブクラスは、次の形式のメソッドを使用して、いくつかの異なるタイプの要求を処理できます。

別のサイトで、彼らは言った

複数のリクエスト処理メソッドを1つのコントローラーに集約するため、関連する機能を簡単にまとめることができます。

私はまだMultiActionController、次のものよりも拡張がどのように優れているか、または異なっているかを理解していませんか?それともMultiActionController、Springの古いバージョンからの遺産ですか?基本的な誤解があるように感じます...

@Controller
public class MyController {

    @RequestMapping("/SomePage.html")
    public ModelAndView epdReview(
        @RequestParam(value="sessionID", required=true) String sessionId,
        MyFormData form,
        HttpSession session,
            HttpServletRequest request){
        //....
    }

    @RequestMapping(value = "/newData.json", method = RequestMethod.POST)
    public @ResponseBody ValidationResponse process(Model model,
        @Valid SomeData formData, BindingResult result,
        HttpSession session) {
        //....
    }
}
4

5 に答える 5

3

はい、それはSpring 2.0 MVC APIからのものであり、古いコントローラーインターフェイスを実装するものも同様です。すべてのいとこが廃止されたのになぜこれが廃止されなかったのかについて、SpringDeveloperからWeb上で何も見つかりません。

DefaultAnnotationMethodHandlerAdapterの動作に置き換えることが不可能なMethodNameResolverの完全に有効なカスタム実装を使用できるため、100%純粋な推測を提供できます。したがって、アノテーションベースの構成は、このクラスのすべての合法的な使用に100%代替を提供するわけではありません。

于 2013-03-15T18:36:01.260 に答える
1

Springは、複数のアクションを1つのコントローラーに集約して、機能をグループ化できるマルチアクションコントローラーを提供します。マルチアクションコントローラーは、リクエストをメソッド名にマッピングしてから、適切なメソッド名を呼び出すことができます。マルチアクションコントローラーの使用は、1つのコントローラーに多くの共通機能があるが、コントローラーへの複数のエントリポイントが必要な場合に特に便利です。

于 2015-11-26T09:09:58.080 に答える
0

注釈付きコントローラーを使用する際の穴は、後の例のように、継承やフレームワーク固有のクラス(最初の4つの例など)に依存せずに要求処理をサポートすることです。Spring Documentationには、次のものがあります。

Spring 2.5では、@ RequestMapping、@ RequestParam、@ ModelAttributeなどのアノテーションを使用して、MVCコントローラー用のアノテーションベースのプログラミングモデルが導入されています。このアノテーションサポートは、サーブレットMVCとポートレットMVCの両方で使用できます。このスタイルで実装されたコントローラーは、特定の基本クラスを拡張したり、特定のインターフェースを実装したりする必要はありません。

したがって、すでに注釈付きコントローラーを使用している場合は、のようなSpring組み込みコントローラーを拡張しても意味がありませんMultiActionController

于 2013-03-15T18:45:53.527 に答える
0

Spring MultiActionControllerは、同様のアクションを単一のコントローラーにマップするために使用されます。したがって、MultiActionControllerクラスを使用する場合は、アクションごとに新しいコントローラークラスを作成する必要はありません。

例:インターネットバンキングにログインするときに、受取人を追加および削除するオプションがあります。したがって、単一のPayeeControllerを使用して、追加や削除などの同様のアクションを実行できます。

于 2015-12-16T07:22:00.630 に答える
-1

mkyong.comからの引用:

Spring MVCアプリケーションでは、MultiActionControllerを使用して関連するアクションを単一のコントローラーにグループ化します。メソッドハンドラーは以下のシグネチャに従う必要があります。

public (ModelAndView | Map | String | void) actionName(
    HttpServletRequest, HttpServletResponse [,HttpSession] [,CommandObject]);

package com.vitthal.common.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class CustomerController extends MultiActionController{

    public ModelAndView add(HttpServletRequest request,
        HttpServletResponse response) throws Exception {

        return new ModelAndView("CustomerPage", "msg","add() method");

    }

    public ModelAndView delete(HttpServletRequest request,
        HttpServletResponse response) throws Exception {

        return new ModelAndView("CustomerPage", "msg","delete() method");

    }

    public ModelAndView update(HttpServletRequest request,
        HttpServletResponse response) throws Exception {

        return new ModelAndView("CustomerPage", "msg","update() method");

    }

    public ModelAndView list(HttpServletRequest request,
        HttpServletResponse response) throws Exception {

        return new ModelAndView("CustomerPage", "msg","list() method");

    }

}

ControllerClassNameHandlerMappingが構成されています。

<beans ...>

 <bean 
  class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />

  <bean class="com.mkyong.common.controller.CustomerController" />

</beans>

マッピングの例これで、要求されたURLは次のパターンでメソッド名にマッピングされます。

CustomerController –&gt; /customer/*
/customer/add.htm –&gt; add()
/customer/delete.htm –&gt; delete()
/customer/update.htm –&gt; update()
/customer/list.htm –&gt; list()

InternalPathMethodNameResolver InternalPathMethodNameResolverは、URLをメソッド名にマップするためのデフォルトのMultiActionController実装です。ただし、メソッド名にプレフィックスまたはサフィックスを追加することはできます。

<beans ...>
 <bean 
  class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />

  <bean class="com.vitthal.common.controller.CustomerController">
     <property name="methodNameResolver">
    <bean class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver">
       <property name="prefix" value="test" />
       <property name="suffix" value="Customer" />
    </bean>
     </property>
   </bean>
</beans>

これで、URLは次のパターンでメソッド名にマップされます。

CustomerController –&gt; /customer/*
/customer/add.htm –&gt; testaddCustomer()
/customer/delete.htm –&gt; testdeleteCustomer()
/customer/update.htm –&gt; testupdateCustomer()
/customer/list.htm –&gt; testlistCustomer()

注注釈を使用すると、MultiActionControllerの構成がより簡単になります

于 2013-03-15T18:35:05.847 に答える