gpt4 book ai didi

java - 将bean数据从servlet传递到jsp时出现问题

转载 作者:行者123 更新时间:2023-12-01 15:47:59 31 4
gpt4 key购买 nike

我有 2 个 jsp 页面,一个名为 MyPage.jsp,另一个名为 View.jsp。 View.jsp 具有树结构。 MyPage.jsp 有一些称为数字和设计的文本字段,需要通过 servlet 通过 bean 进行填充。单击 View.jsp 中的任何树节点时,应使用设置的文本字段值来呈现 MyPage.jsp。现在发生的情况是,由于 MyPage.jsp 被调用了两次,即一次在 View.jsp(在 ajax 函数中)中,第二次在 servlet 中的请求调度程序中,因此在 servlet 中设置的 bean 值丢失了。请建议一种更好的方法,以便在整个过程中保留这些值,并且单击树节点时 MyPagejsp 将使用设置的字段值进行渲染。

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 页面具有以下代码

查看.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 打印了两次值;曾经作为值(value)观 202第二个为空值。因为它用 null 替换了原始值,只是因为 MyPage.jsp 被调用了两次,所以第二次值丢失了。请帮忙

最佳答案

我相信您混淆/误解了一些基本概念,特别是 HTTP 的工作原理以及 Ajax 的工作原理。

这里发生的情况是,您实际上正在触发两个 HTTP 请求。一位 $.ajax()以及其他 element.attr('src', url) 。每个请求都会导致创建和设置完全不同的 bean 实例。您完全忽略了 $.ajax() 回调中的 bean 数据。要求。我不确定 HTML 元素 [id=content]代表,但我猜它是 <iframe> 。这不完全是正确的方法。

您最终应该有效地触发一个 HTTP 请求。基本上有两种解决方案:

  1. 忘记 $.ajax()并通过element.attr('src', url)发送请求.

    $("[id=content]").attr("src", "/Test-portlet/MyPage.jsp?number=" + encodeURIComponent(node.data.title));

    您还可以将 URL 更改为 Servlet URL,以便您拥有更多的预处理控制权,最后使用 RequestDispatcher#forward()而不是include() 。不要将 HTML 写入 servlet 中的响应。让 JSP 来做吧。

  2. 忘记 <iframe>完全由 Servlet/Ajax 处理响应,无需 JSP 的干预。您需要将 bean 转换为其他可由 JavaScript/jQuery 轻松解析的数据格式。我建议为此使用 JSON。

    $.get(AJAX_SERVLET, { "number": node.data.title }, function(response) {
    $("#number").text(response.number);
    $("#design").text(response.design);
    });

    以 HTML 为例

    <div id="number"></div>
    <div id="design"></div>

    以及在 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);

另请参阅:

关于java - 将bean数据从servlet传递到jsp时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6743542/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com