通过DispatcherServlet发出Ajax请求

时间:2011-01-18 19:47:59

标签: java ajax jsf spring-mvc

我希望你能解决我的简单问题。

我已配置spring mvc应用程序,它是从简单的jsf应用程序配置的。我使用primefaces库。

我有一个控制器,它处理来自welcome.do请求的请求,ViewResolver通过带有前缀/ ui /和后缀.xhtml的规则查找。简单而常用的配置。

@RequestMapping( “/ *。做”)  public void actionDo(){   logger.debug( “调用”);  } 第一个请求是corectly处理的,但是当我从欢迎表单生成ajax请求到某个sessionBean时,它会生成警告:

[2011-01-18 21:28:28,442] org.springframework.web.servlet.DispatcherServlet.doService DispatcherServlet with name 'springDispatcher' processing POST request for [/prime/ui/welcome.do] 
[2011-01-18 21:28:28,443] org.springframework.web.servlet.PageNotFound.noHandlerFound No mapping found for HTTP request with URI [/prime/ui/welcome.do] in DispatcherServlet with name 'springDispatcher'

因此,它尝试按名称/ui/welcome.do查找视图,但不能,因为ajax请求与我的请求处理规则不匹配。 DispatcherServlet是否应该处理ajax请求?

我认为这是非常常见的问题,可以简单地解决,但我不知道如何解决。没有Spring MVC一切正常。那么,你能告诉我通过DispatcherServlet传递ajax请求的好方法吗?

我的web.xml文件的一部分。

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>springDispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>springDispatcher</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

谢谢!

2 个答案:

答案 0 :(得分:0)

您的AJAX请求是作为POST请求发送的,您必须将HTTP方法添加到@RequestMapping-annotation中,例如@RequestMapping(value =“/ * .do”,method = RequestMethod.POST)。如果省略注释中的“method”-value,则默认为RequestMethod.GET。

答案 1 :(得分:0)

您正在使用jsf来处理表示层;为什么你也使用spring mvc? 你必须使用其中一个:尝试只使用faces servlet。