2012-04-25 12 views
5

私は春3.1 Webアプリケーションを持っていて、Ajaxリクエストをしようとしていますが、Firebugではマッピングが見つからないことがわかります。私はいろいろ試しましたが、私のコントローラーメソッドに到達することができません。ここではいくつかの詳細は以下のとおりです。spring ajax request

この私は私のweb.xmlがあります。

<servlet> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/ctrl/*</url-pattern> 
</servlet-mapping> 

この私は私のコントローラを持っている:

@RequestMapping(value="/ctrl/test", method = RequestMethod.GET) 
public @ResponseBody String test() { 
    System.out.println("method test()"); 
    return "aString"; 
} 

この私が私のディスパッチャ-servlet.xmlにあります。

コントローラのメソッドにマップされた別のリクエストがあり、動作していますが、ajaxではありません:

@RequestMapping(value="/ctrl", method = RequestMethod.GET) 
public String printWelcome(ModelMap model, HttpSession session) { 
    initializeTree(session); 
    return "tree"; 
} 

誰もが正しい方向に私を指すことができますか?

答えて

1

私は解決策を見つけた私のコントローラで

<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/ctrl/*</url-pattern> 
</servlet-mapping> 

@RequestMapping(value="/test", method = RequestMethod.GET) 
public String test(ModelMap model, HttpSession session) { 
    System.out.println("method test()"); 
    return null; 
} 

オン私はjQueryを使用しています:

$.get(
    "ctrl/test/", 
    function(data){ 
     alert(data); 
}); 

私はこれをベースに構築できます。私のSystem.out.printlnが印刷されているので、今すぐコントローラにアクセスできます

1

ディスパッチャーサーブレットは/ctrl/testのためにマップされていないため、AJAXコントローラ用に呼び出されることはありません。ディスパッチャは、両方のURLをディスパッチできるようにするため

はあなた servlet-mapping

<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/ctrl/*</url-pattern> 
</servlet-mapping> 

に変更

。詳細情報については

、これは(WebLogicが特異的であるが、一般的に適用されます)役立つことがあります。http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp/components.html#148787

+0

ありがとうございます。私はあなたの提案を試みた。[/ ctrl/test]、[/ctrl/test.*]、[/ ctrl/test /]、[/ ctrl]、[/ctrl.*]、[/ ctrl/test]のJBossを起動すると、/ctrl /]をクリックします。しかし、私はまだ私のハンドラメソッド(public @ResponseBody String test())に到達できません。 – Tom

+0

あなたのAJAXコントローラはGETを送信していますか、それともPOSTを使用している可能性がありますか? – beny23

+0

getリクエストを送信しています – Tom

3

を私はいつも* .actionまたは* AJAXのためのアヤックスに基づく要求と* .htmlのマッピングなどのAJAXベースのリンクを使用していますjspビュー用。すべてのAjaxはURIが/ CTRLで始まるコマンドの場合、私はあなたが以下をお勧めします

@Controller 
@RequestMapping(value="/ctrl") 
public class AjaxController{ 

@RequestMapping(value="/test.ajax", method = RequestMethod.GET) 

public String test(ModelMap model, HttpSession session) { 
    System.out.println("method test()"); 
    return "test"; 

} 
} 

することを忘れないでください。そして、あなたのディスパッチャサーブレットは、次の

<servlet> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <url-pattern>*.ajax</url-pattern> 
    </servlet-mapping> 
<servlet-mapping> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <url-pattern>*.html</url-pattern> 
    </servlet-mapping> 

次のステップでなければなりませんajaxベースのマッピングに@ResponseBodyアノテーションを追加してください。

は今のindex.htmlのためのあなたのビューコントローラは、以下のようになります。私のweb.xmlに

@Controller 
public class ViewController{ 

@RequestMapping(value="/index.html", method = RequestMethod.GET) 
@ResponseBody 
public String test(ModelMap model, HttpSession session) { 
    System.out.println("method test()"); 
    return "index"; 

} 
} 
+0

thx;私はajaxベースのリクエストの拡張機能が気に入っています。 – Tom

関連する問題