【问题标题】:If I need to return value from servlet to jsp如果我需要将值从 servlet 返回到 jsp
【发布时间】:2015-05-01 07:14:52
【问题描述】:

我是 jsp/servlet 的新手,我正在使用一个有许多 jsp 页面和 servlet 的应用程序。 在第一个 jsp 页面中,我选择了一个客户。

<select id ="sel" name="customer">
   <option>customer1</option>
   <option>customer2</option>
   <option>customer3</option>
   <option>customer4</option>
</select>

在第二个jsp页面中,它显示了与该客户相关的菜单(例如我选择配置并转到第三个jsp页面)

<% HttpSession session = request.getSession(true);
   String chos_cust=request.getParameter("customer");
   session.setAttribute("cust_menu",chos_cust); %>

   ....
<%= session.getAttribute("cust_menu")%>

在第三个jsp页面中,我选择了与该客户相关的类别(每个客户有很多类别) 此处运行 sql 查询以将类别显示为单选按钮:

  <input type="radio" name="chos_gr" value="${groups.group_name}"checked > ${groups.group_name}

在第四个jsp页面中,根据选择的类别,它将显示子类别。在这个jsp页面中我有三个div html格式,隐藏类型。第一个div显示产品列表,第二个div用于添加产品,最后一个div可以删除产品。

  String config_gr = request.getParameter("chos_gr");
  session.setAttribute("config_menu",config_gr);

我使用 servlet 来执行这些操作(添加、删除)。它运行良好,但是当我添加或删除产品并在 servlet 中使用 requestDispstcher/forward 以返回到最后一个 jsp 以查看结果(产品列表)时 类别显示为空,产品列表中不显示任何内容。

如果我应该将servlet中category的值返回给最后一个jsp? 谁能告诉我是什么问题?

我无法为这篇文章添加评论。正如@underdog 建议的那样,我在最后一个jsp 中使用了 ${sessionScope.config_menu} ,它仍然显示类别为空。这很奇怪,因为当我返回最后一个 jsp 以查看结果时,我得到了客户价值,但类别却没有。

【问题讨论】:

    标签: java html jsp servlets


    【解决方案1】:

    您在会话属性中添加所有对象/值。使用请求调度程序,您可以将流转发到带有请求和响应对象的 jsp。请求对象不包含您在会话对象中设置的客户信息。

    在 jsp 中尝试访问会话范围内的值。 ${sessionScope.config_menu} 会给你想要的输出。

    【讨论】:

      【解决方案2】:

      不要使用response.sendRedirect(url),而是考虑使用以下:

      RequestDispatcher dispatcher = request.getRequestDispatcher(url);
      dispatcher.forward(request,response); 
      

      上面带有getRequestDispatcher() 的代码将允许您使用dispatcher.forward 包含调用servlet 的请求,这将包括您缺少的会话属性。

      [注意:OP 已经在执行上述操作]

      [更新]

      根据您建议在&lt;input type="hidden" name="myfield"&gt; 字段中编码某些参数的方式,我怀疑您没有做任何其他事情来存储这些值。这意味着,第一次时,它们可能是使用上一个请求中的参数设置的,但是当使用 dispatcher.forward 时,这并没有发生。

      对于要使用适当值启动的字段,它们需要通过请求参数(例如 GET 参数,在 URL 中编码)或通过 &lt;input type="hidden" value="${whatever}" name="myfield"&gt; 或类似代码在 JSP 本身中设置.我也缺少能够验证的那部分代码。

      使用 dispatcher.forward(),您可能没有设置所需的参数。

      【讨论】:

      • 我向您道歉。看起来 OP 已经正确地做到了这一点。但是,我将把这个答案留在这里,因为它可能会帮助其他人在谷歌上搜索并在类似问题上绊倒。
      猜你喜欢
      • 2015-07-26
      • 1970-01-01
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 1970-01-01
      • 2013-11-25
      • 2012-05-03
      相关资源
      最近更新 更多