是否可以在没有responseBody注释的情况下对控制器方法使用ajax请求来返回重新编译的jsp?

时间:2014-12-15 11:59:37

标签: java ajax jsp spring-mvc

我想重新渲染部分页面而不重新加载页面。

我将使用ajax请求来完成它。

我发现的所有示例都使用@ResponseBody注释,并在客户端javaScript句柄xml或json上。

我的原因 - 获取htm片段并替换我的部分页面

结构:

bigJsp.jsp

...
incude small.jsp
...

我想要重新呈现small.jsp并在我的页面上将其替换而不重新加载页面。

我找不到这个例子。你能救我吗?

2 个答案:

答案 0 :(得分:0)

尝试执行以下操作:

1)将include small.jsp替换为某个div。

<div id="smallContent"></div>

2)创建一个创建正确视图的控制器方法:

@RequestMapping(value = "small", method = RequestMethod.GET)
    public String testSmall(Model model) {
        model.addAttribute("small_message", new Date().toString());
        return "small";
    }

3)创建小视图(small.jsp):

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div style="background: red">
My message: ${small_message}
</div>

4)使用ajax获取div的html内容:

<html>
<body>
<script src="http://code.jquery.com/jquery-1.11.1.min.js" type="text/javascript"></script>
    <script>
        function reloadSmall() {
            $.get("/small", function(response) {
                $("#smallContent").html(response);
            });
        }
    </script>
<div id="smallContent" style="background: green"></div>
<button onclick="reloadSmall()">Click me</button>
</body>
</html>

答案 1 :(得分:0)

你应该有一个控制器方法返回 ModelAndView ,例如

@RequestMapping(value = "/small", method = RequestMethod.GET)
public ModelAndView smallJSP()  {
    ModelAndView modelAndView = new ModelAndView("small");
    return modelAndView;
}

控制器将在默认位置搜索名称为small的视图,并使用默认后缀(具体取决于您的配置,例如/WEB-INF/views/small.jsp)。比你应该简单地用适当的ajax调用调用该方法,例如通过jquery

     $.ajax({
            url:"/small",
            dataType: "html",
            type: "GET",          
            success: function (msg) {
               $(".responseDiv").html(msg);// place your response to some div
            }
        });