如何在ajax servlet调用中包含具有动态值的jsp

时间:2014-03-26 12:14:11

标签: jquery jsp servlets



我有一个jsp页面,其中是标题,左右面板,标题和左侧面板是静态的。 左侧面板有href,如果我们点击链接,将在右侧面板中加载新页面。我希望使用Jquery Ajax来实现此任务,而无需刷新整个页面。

现在我的查询是单击链接/按钮使用jquery ajax我调用servlet而我从servlet我想设置jsp动态值,然后在右侧面板中加载相同的更新值。

我尝试设置值但是我变为null。你能帮助我在jsp中设置动态值吗?

下面是我点击按钮的示例代码我希望将hello.jsp包含在动态变量" message"如果我在这里取得成功,我可以解决上述问题。

的index.jsp

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>JQuery AJAX Testing</title>

<script src="js/jquery-1.11.0.min.js"></script>

<script>
$(document).ready(function() {
    $("button").click(function(){

        $.ajax({
            type : "post",
            url : "AjaxServlet",

            success : function(responseText) {

                $('#message').load("jsp/hello.jsp");
            },
            error : function(xhr, ajaxOptions, thrownError) {
                alert(xhr.status);
                alert(thrownError);
            }

        });
    });


});
</script>

</head>
<body>
<div id="ajaxtest">
<h2>AJAX Testing using JQuery</h2>
</div>
<div id="message"></div>
<button>Change Content</button>
</body>
</html>

AjaxServlet代码:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    System.out.println("Servlet post method is called");

    // I want to set this value in hello.jsp
    request.setAttribute("message", "I am from request get attribute");
    response.getWriter().write("This is reply from servlet");

}

的hello.jsp

<h1>Hello this page is include from index JSP</h1>
<%=request.getAttribute("message")%>

我想在来自JQuery

的加载时从servlet中设置hello.jsp中的消息

PISE

1 个答案:

答案 0 :(得分:1)

你想要做的是,在成功时获取请求参数“message”而不是“jsp / hello.jsp”,然后将请求参数返回给模板而不是整个jsp文件。

我认为不能加载这样的jsp文件并且已正确解释,而load()将通过第二个ajax请求加载文件,并且永远不会通过第一个请求向模板返回任何内容。

尝试:

success : function(responseText) {
        $('#message').html(responseText);
    }

还要看一下堆栈上的Q / A,了解ajax返回值的原理: How do I return the response from an asynchronous call?