Java 将bean数据从servlet传递到jsp时出现问题
我有两个jsp页面,一个叫做MyPage.jsp,另一个叫做View.jsp。jsp具有树结构。jsp有一些称为number和design的文本字段,需要通过servlet通过bean填充这些字段。单击View.jsp中的任何树节点时,MyPage.jsp都应该使用设置的文本字段值进行呈现。现在发生的事情是因为MyPage.jsp被调用了两次,即一次在View.jsp中(在ajax函数中),第二次在servlet中的请求调度器中,因此servlet中设置的bean值丢失。请建议一种更好的方法,以便在整个过程中保留值,并在单击树节点MyPagejsp时使用设置的字段值呈现Java 将bean数据从servlet传递到jsp时出现问题,java,ajax,jsp,servlets,javabeans,Java,Ajax,Jsp,Servlets,Javabeans,我有两个jsp页面,一个叫做MyPage.jsp,另一个叫做View.jsp。jsp具有树结构。jsp有一些称为number和design的文本字段,需要通过servlet通过bean填充这些字段。单击View.jsp中的任何树节点时,MyPage.jsp都应该使用设置的文本字段值进行呈现。现在发生的事情是因为MyPage.jsp被调用了两次,即一次在View.jsp中(在ajax函数中),第二次在servlet中的请求调度器中,因此servlet中设置的bean值丢失。请建议一种更好的方法,以
responseBean.setNumber("220");
responseBean.setDesign("xyz");
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
request.setAttribute("responseBean", responseBean);
RequestDispatcher requestDispatcher = getServletContext().getRequestDispatcher("/MyPage.jsp");
requestDispatcher.include(request, response);
response.getWriter().write("Success");
使用bean值集调用MyPage.jsp的jsp页面包含以下代码
View.jsp
$.ajax({
url : AJAX_SERVLET,
type: "GET",
data: "Number="+node.data.title,
success : function(output) {
$("[id=content]").attr("src", '/Test-portlet/MyPage.jsp');
}
});
}
MyPage.jsp
<jsp:useBean id="responseBean" class="com.web.bean.ResponseBean" scope="request">
<jsp:setProperty name="responseBean" property="*"/>
</jsp:useBean>
<body>
<%System.out.println("Values"+responseBean.getNumber()); %>
</body>
在上面的MyPage.jsp代码中,System.out.println将值打印两次;一度
值202
第二个为空值。因为调用MyPage.jsp两次就用null替换了原始值,所以第二次的值丢失了。请帮助我相信您混淆了/误解了一些基本概念,特别是HTTP如何工作以及Ajax应该如何工作 这里发生的是,您实际上触发了两个HTTP请求。一个是通过
$.ajax()
,另一个是通过元素.attr('src',url)
。每个请求都会导致创建和设置一个完全不同的bean实例。您完全忽略了$.ajax()
请求回调中的bean数据。我不确定HTML元素[id=content]
代表什么,但我猜它是一个
。这不是完全正确的方式
最终应该有效地触发一个HTTP请求。基本上有两种解决方案:
$.ajax()
,通过元素.attr('src',url)
发送请求
$(“[id=content]”)attr(“src”,“/testportlet/MyPage.jsp?number=“+encodeURIComponent(node.data.title));
您还可以将URL更改为servlet URL,这样您就有了更多的预处理控制,并最终使用RequestDispatcher#forward()
而不是include()
。不要将HTML写入servlet中的响应。让JSP来做吧
这件事,完全通过Servlet/Ajax处理响应,而不需要JSP的干预。您需要将bean转换为其他数据格式,这些格式很容易被JavaScript/jQuery解析。我建议对此使用JSON
$.get(AJAX_SERVLET,{“number”:node.data.title},函数(响应){
$(“#编号”).text(response.number);
$(“#设计”).text(response.design);
});
以HTML为例
在servlet中
// ... (create ResponseBean the way as you want)
String json = new Gson().toJson(responseBean);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
System.out.println()
示例很糟糕,因为它永远无法找到并打印由servlet或jsp:useBean
设置为请求属性的bean。它只会导致NullPointerException
。