4

Spring 3.1 Webアプリケーションがあり、ajaxリクエストを作成しようとしていますが、firebugでマッピングが見つからないことがわかります。いろいろ試してみましたが、コントローラー方式にたどり着くことができません。詳細は次のとおりです。

これは私が私の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";
}

これは、dispatcher-servlet.xmlにあります。

<bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/pages/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

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

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

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

4

3 に答える 3

2

私は常にajaxベースのリンクをAJAXベースのリクエストには*.actionまたは*.ajaxとして使用し、jspビューには*.htmlマッピングを使用しています。その場合、ディスパッチャサーブレットは次のようになります。

    <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コマンド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";

}
}

@ResponseBodyajaxベースのマッピングにアノテーションを追加することを忘れないでください。

これで、index.htmlのビューコントローラは次のようになります。

@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";

}
}
于 2012-04-25T12:36:13.450 に答える
0

ディスパッチャーサーブレットはにマップされて/ctrl/testいないため、AJAXコントローラーに対して呼び出されません。

に変更servlet-mappingします

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

ディスパッチャが両方のURLをディスパッチできるようにします。

詳細については、これが役立つ場合があります(Weblogic固有ですが、一般的に適用されます):http ://docs.oracle.com/cd/E13222_01/wls/docs81/webapp/components.html#148787

于 2012-04-25T07:42:24.853 に答える
0

私は解決策を見つけました:

私のweb.xmlで:

<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が印刷されるので、コントローラーにアクセスできます

于 2013-04-19T09:08:23.913 に答える