【问题标题】:how to show jsp in response to an ajax call to a servlet [duplicate]如何显示jsp以响应对servlet的ajax调用[重复]
【发布时间】:2011-03-17 09:00:42
【问题描述】:

我正在使用 ajax 向搜索 servlet 发送搜索参数,并且该 servlet 正在搜索数据库。现在我将请求发送到 SearchResults.jsp,我将在其中显示结果。

String nextJSP = "/s/SearchResults.jsp";
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
dispatcher.forward(request, response);

问题是我得到完整的 jsp 以响应 ajax 调用,但我希望在 ajax 调用之后打开 SearchResults.jsp 页面并显示结果。

【问题讨论】:

    标签: java ajax jsp search servlets


    【解决方案1】:

    不要为此使用 JSP。它仅适用于 HTML 内容。只需让servlet返回JSON或XML并在JS端进行处理。这是一个启动示例,假设您要搜索产品并且 Product 类具有您希望在表格中显示的属性 namedescriptionprice

    products.jsp

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <title>SO question 5336889</title>
            <script src="http://code.jquery.com/jquery-latest.min.js"></script>
            <script>
                $(document).ready(function() {
                    $('#search').submit(function() {
                        $.get(this.action, $(this).serialize(), function(products) {
                            var $table = $('<table>').appendTo($('#results'));
                            $.each(products, function(index, product) {
                                var $tr = $('<tr>').appendTo($table);
                                $('<td>').text(product.name).appendTo($tr);
                                $('<td>').text(product.description).appendTo($tr);
                                $('<td>').text(product.price).appendTo($tr);
                            });
                        });
                    });
                });
            </script>
        </head>
        <body>
            <form id="search" action="products">
                Search products:
                <input name="query" />
                <input type="submit" />
            </form>
            <div id="results"></div>
        </body>
    </html>
    

    与侦听/products 的 URL 模式的 servlet 结合使用:

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Product> products = productDAO.find(request.getParameter("query"));
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(new Gson().toJson(products));
    }
    

    (其中GsonGoogle Gson

    另见:

    【讨论】:

      【解决方案2】:

      有一个类似的问题:best practice to render JSON data in JSPs? 这是 json 返回 json 数据的示例:http://code.google.com/p/json-simple/wiki/JSPAndAJAXExamples 还有一些 jsp 标签库,例如:http://json-taglib.sourceforge.net/

      总之,你可以通过判断请求接受类型来控制在jsp中输出什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-18
        • 2011-04-06
        • 2016-12-09
        • 2013-04-15
        • 1970-01-01
        • 2013-06-17
        • 2011-07-24
        相关资源
        最近更新 更多