2012-04-25 46 views
5

Tôi có một ứng dụng web mùa xuân 3.1 và đang cố gắng thực hiện yêu cầu ajax, nhưng trong firebug tôi có thể thấy bản đồ của tôi không được tìm thấy. Tôi đã thử nhiều thứ khác nhau, nhưng tôi không thể tiếp cận được phương pháp điều khiển của mình. Dưới đây là một số chi tiết:yêu cầu ajax mùa xuân

này tôi có i web.xml của tôi:

<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> 

này tôi có trong bộ điều khiển của tôi:

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

này tôi có trong tôi 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> 

Tôi có một yêu cầu khác được ánh xạ tới một phương pháp trong bộ điều khiển của tôi và bộ điều khiển đang hoạt động nhưng không phải là ajax:

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

Bất kỳ ai cũng có thể chỉ cho tôi đúng hướng?

Trả lời

1

Tôi tìm thấy một giải pháp:

trong web.xml của tôi:

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

trong bộ điều khiển của tôi:

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

Trên c lient side, tôi sử dụng jQuery:

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

Tôi có thể xây dựng dựa trên điều này; System.out.println của tôi đang được in, vì vậy tôi có thể liên hệ với bộ điều khiển của mình ngay bây giờ

1

Bộ điều phối của bạn không được ánh xạ cho /ctrl/test, vì vậy nó sẽ không được gọi cho bộ điều khiển AJAX.

Thay đổi của bạn servlet-mapping để

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

Vì vậy mà dispatcher có thể gửi cả các URL.

Mọi chi tiết, điều này có thể giúp (WebLogic cụ thể nhưng áp dụng nói chung): http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp/components.html#148787

+0

Cảm ơn bạn đã trả lời; Tôi đã thử đề xuất của bạn.Tôi có thể thấy các url sau được ánh xạ khi khởi động JBoss: [/ ctrl/test], [/ctrl/test.*], [/ ctrl/test /], [/ ctrl], [/ctrl.*] và [/ctrl /]. Nhưng tôi vẫn không thể tiếp cận phương thức xử lý của tôi (kiểm tra String @ResponseBody công cộng()). – Tom

+0

Bộ điều khiển AJAX của bạn có gửi GET hoặc có khả năng nó có thể sử dụng POST không? – beny23

+0

Nó gửi một yêu cầu nhận được – Tom

3

Tôi luôn sử dụng liên kết ajax dựa như * .action hoặc * .ajax cho AJAX dựa yêu cầu và lập bản đồ * .html cho chế độ xem jsp. Sau đó, Servlet phối của bạn nên là sau

<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> 

Bước tiếp theo:

nếu tất cả ajax của bạn lệnh URI bắt đầu với/ctrl tôi khuyên bạn như sau:

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

} 
} 

Đừng Quên để thêm chú thích @ResponseBody vào ánh xạ dựa trên ajax của bạn.

tại bộ điều khiển xem của bạn cho index.html nên như sau:

@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 cho các mẹo; Tôi thích phần mở rộng cho các yêu cầu dựa trên ajax. – Tom

Các vấn đề liên quan