首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JQuery + RequestContextUtils + ApplicationContext

JQuery + RequestContextUtils + ApplicationContext
EN

Stack Overflow用户
提问于 2013-11-12 16:51:59
回答 1查看 935关注 0票数 0

当包含引用RequestContextUtils的jsp代码时,JQuery无法加载jsp页。

代码语言:javascript
复制
<%@ page import="org.springframework.context.ApplicationContext,org.springframework.web.servlet.support.RequestContextUtils,org.sunshine.location.LocationService,org.sunshine.domain.Location,java.util.List"%>
<%
   out.println("request:" + request.getContextPath());
   ApplicationContext locationContext = RequestContextUtils.getWebApplicationContext(request);
   LocationService locationService = (LocationService) locationContext.getBean("locationService");
   List<Location> locations = locationService.getLocations();
   out.println(locations);
%>
   <table id="location-table" width="95%" bgcolor="f8f8ff" border="0"
        cellspacing="0" cellpadding="5">
        <c:forEach items="<%=locations%>" var="location">
            <tr>
                <td><c:out value="${location.id}" /></td>
                <td><a href="index.htm?store=${location.id}"><c:out
                            value="${location.name}" /></a></td>
            </tr>
        </c:forEach>
    </table>

如果我正常访问上面的jsp页面,它就可以正常工作。但是,当我使用JQuery的load / get方法时,如下所示-它失败了。

代码语言:javascript
复制
$(document).ready(function(){
  $("button").click(function(){
    $.get("jsp/locations.jsp",function(data,status){
    alert("Data: " + data + "\nStatus: " + status);
    });
  });
});

代码语言:javascript
复制
$(document).ready(function(){
  alert("locad");
  $("#locations-column").load("jsp/locations.jsp");
});

我注释了所有不必要的代码,以找出根本原因。我发现jquery = RequestContextUtils.getWebApplicationContext(request);语句使得ApplicationContext locationContext不会加载页面。

例外:

java.lang.IllegalStateException:找不到WebApplicationContext :不在DispatcherServlet中

想知道为什么吗?当它作为普通jsp文件运行时,如何找到它web上下文,以及为什么不能在通过JQuery加载它时找到它。

有人能帮我知道为什么会这样吗?我该如何解决这个问题?

预先感谢-Vijay Daniel

EN

回答 1

Stack Overflow用户

发布于 2013-11-28 08:44:56

解决了问题。问题出在作为方法RequestContextUtils.getWebApplicationContext的参数发送的请求对象上。它是:

代码语言:javascript
复制
ApplicationContext productContext = RequestContextUtils.getWebApplicationContext(request);

我发现来自jquery的请求对象不包含获取bean所需的属性DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE。但我找到了构建应用程序上下文的替代方法:

代码语言:javascript
复制
ApplicationContext productContext = RequestContextUtils
                .getWebApplicationContext(request,servletContext); 

在这里,servlet上下文与请求一起传递。Servlet上下文可以通过如下方式获取:

代码语言:javascript
复制
ServletContext servletContext = (ServletContext)
request.getSession().getServletContext();

因此,将jsp代码修改为使用的servlet上下文对我来说很有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19924699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档