Spring MVC Controller向/从使用ajax的jsp页面发送/接收数据

时间:2016-10-19 11:01:47

标签: ajax jsp spring-mvc

如何从jsp/ajax中的spring controller获取一条简单的消息(如msg),并将response(如resp)从控制器返回给jsp,而jsp可以获取此消息使用ajax进行响应并在<div>

中显示

以下示例可能不正确,特别是ajax部分,感谢修改:

这是我的控制器:

    @RequestMapping("/testAjax")
    protected ModelAndView testActiveX(HttpServletRequest request,HttpServletResponse response){       
        ModelAndView model = new ModelAndView("test_Ajax");
        Date date=new Date();
        model.addObject("date",date.toString());
        return model;
    }

这是我的test_Ajax.jsp页面:

<html lang="en">
<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<head>
    <spring:url value="/resources/jquery-3.1.1.min.js" var="jqueryJs"></spring:url>
    <script src="${jqueryJs}"></script>
    <script >
        $(document).ready(function($)
        {
            $("#translate").click(translation());
        });
        function translation() {
            var words = $("input").val();
            $.ajax({
                url: '/WEB-INF/jsp/test_Ajax.jsp',
                data: {
                    word: words
                },
                success: function (data) {

                    $("#container").html(data);
                },
                type: 'GET'
            });
        }
    </script>
</head>
<body>
<input type="text" id="input" name="inputword"><br/><br/> <-- used to provide msg --%>
<button id="translate">Translate</button><br/><br/>
<div id="container"></div>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

正如我所看到的,你在ajax调用url中有一个错误,因为你正试图访问WEB-INF文件夹中的jsp。当您使用带有@RequestMapping的spring mvc时,必须将ajax调用指向此映射所侦听的url。

在您的情况下,您必须更改URL以指向servlet端点,这是为您提供视图的组合html的actor     $就({         url:'/ testAjax',         数据:{             单词:单词         },         成功:函数(数据){             $( “#集装箱”)HTML(数据);         },         类型:'GET'     });

可能会出现另一个错误,因为您的请求映射可能位于上下文中(因此您可以将requestContext concat放入请求映射网址。

希望这有帮助

答案 1 :(得分:0)

您发布的代码应使用ajax调用中正确的url。 Java应用程序有一个上下文(URI的开头),所以你在告诉url时必须注意这一点(如果你使用的是web 3.0规范,你可以使用像$ {contextPath}这样的jstl表达式来获取这个值。) p>

您还可以接收查询参数(通过post或get发送)向控制器方法添加参数并使用@QueryParam对其进行注释,该参数接收要映射的参数名称(如果您有JacksonMapper,这也适用于复杂的json对象) bean在spring上下文中定义)。所以举个例子。接收你必须添加的单词字符串

@QueryParam("word") String word 

到方法签名。 你也可以直接使用该方法中的HttpServletRequest,并获得这样的param内容:

String word = request.getParam("word");

控制器内部。