我使用ajax将搜索参数发送到搜索servlet,并且该servlet正在搜索数据库。现在我将请求发送到SearchResults.jsp,我在那里显示结果。
String nextJSP = "/s/SearchResults.jsp";
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
dispatcher.forward(request, response);
问题是我在响应ajax调用时获得了完整的jsp,但是我希望在ajax调用之后用结果打开SearchResults.jsp页面。
答案 0 :(得分:1)
有一个类似的问题: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/
简而言之,您可以通过juding请求接受类型来控制在jsp中输出的内容。
答案 1 :(得分:1)
不要为此使用JSP。它只适用于HTML内容。只需让servlet返回JSON或XML并在JS端处理它。这是一个启动示例,假设您要搜索产品,并且Product
类具有您希望在表格中显示的属性name
,description
和price
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
:
@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));
}
(其中Gson
为Google Gson)。