我是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以查看结果(产品列表)时 在类别中显示null,在产品列表中没有显示任何内容。
如果我应该将servlet中category的值返回到最后一个jsp? 有人能告诉我问题是什么吗?
我无法为此帖添加评论。正如@underdog建议我在最后一个jsp中使用了$ {sessionScope.config_menu},它仍然显示类别为null。这很奇怪,因为当我返回到最后一个jsp以查看结果时我获得了客户价值,但没有类别。
答案 0 :(得分:0)
您正在添加会话属性中的所有对象/值。使用请求调度程序,您可以将流转发到带有请求和放大器的jsp。响应对象。请求对象不包含您在会话对象中设置的客户的信息。
在jsp中尝试访问会话范围中的值。
ssh -fN -L 9999:localhost:9999 myuser@1.11.11.111
会为您提供所需的输出。
答案 1 :(得分:-1)
请考虑使用以下内容,而不是使用response.sendRedirect(url)
:
RequestDispatcher dispatcher = request.getRequestDispatcher(url);
dispatcher.forward(request,response);
使用getRequestDispatcher()
的上述代码将允许您使用dispatcher.forward
包含您的调用servlet的请求,其中包含您缺少的会话属性。
[注意:OP已经在做上述事情]
[UPDATE]
基于您建议在<input type="hidden" name="myfield">
字段中编码某些参数的方式,我怀疑,您没有做任何其他事情来存储值。这意味着,第一次使用前一个请求中的参数设置它们,但是在使用dispatcher.forward
时,这不会发生。
对于要使用适当值启动的字段,它们需要通过请求参数(例如GET
参数,在URL中编码)提供,或者通过{{1}在JSP本身内设置或类似的代码。我也错过了能够验证的部分代码。
使用dispatcher.forward(),您可能没有设置所需的参数。