在JSP页面中使用request.setAttribute

时间:2008-10-23 14:24:31

标签: java java-ee setattribute request-object

是否可以在JSP页面上使用request.setAttribute然后在HTML Submit上使用Servlet中的相同请求属性?

7 个答案:

答案 0 :(得分:24)

没有。不幸的是,Request对象只有在页面加载完成后才可用 - 一旦完成,你将丢失其中的所有值,除非它们已被存储在某个地方。

如果您想通过请求保留属性,则需要:

  1. 在表单中有隐藏的输入,例如<input type="hidden" name="myhiddenvalue" value="<%= request.getParameter("value") %>" />。然后,它将在servlet中作为请求参数提供。
  2. 将它放入会话中(参见request.getSession() - 在JSP中,这只是session
  3. 我建议使用Session,因为它更容易管理。

答案 1 :(得分:4)

Phil Sacre的回复是正确的,但会议不应仅仅用于它的地狱。您只应将此用于真正在会话生命周期内需要生存的值,例如用户登录。通常会看到人们过度使用会话并遇到更多问题,特别是在处理集合或用户返回他们之前访问过的页面时,发现他们的值仍然保留在之前的访问中。智能程序尽可能地最小化变量的范围,坏的程序使用会话太多。

答案 2 :(得分:4)

如果您希望持续请求,请尝试以下操作:

示例:在您的JSP或servlet页面上

request.getSession().setAttribute("SUBFAMILY", subFam);

并在任何接收页面上使用以下行检索您的会话和数据:

SubFamily subFam = (SubFamily)request.getSession().getAttribute("SUBFAMILY");

答案 3 :(得分:3)

您可以使用pageContext属性执行此操作:

在JSP中:

<form action="Enter.do">
    <button type="SUBMIT" id="btnSubmit" name="btnSubmit">SUBMIT</button>
</form>
<% String s="opportunity";
pageContext.setAttribute("opp", s, PageContext.APPLICATION_SCOPE); %>

在Servlet中(链接到“Enter.do”url-pattern):

String s=(String) request.getServletContext().getAttribute("opp");

除了APPLICATION_SCOPE之外还有其他范围,如SESSION_SCOPE。 APPLICATION_SCOPE用于ServletContext属性。

答案 4 :(得分:2)

尝试

request.getSession().setAttribute("SUBFAMILY", subFam);
request.getSession().getAttribute("SUBFAMILY");

答案 5 :(得分:1)

如果错误,请纠正我...我认为请求会在连续页面之间保持不变..

认为你从第1页开始遍历 - &gt;第2页 - &gt;第3页。

您使用第1页的setAttribute在请求对象中设置了一些值,您可以使用getAttribute在第2页中检索,然后如果您尝试在同一个请求对象中再次设置某些内容以在第3页中检索它,那么它将无法为您提供null值为“创建JSP的请求,以及在提交JSP时生成的请求是完全不同的请求,并且第一个上的任何属性将在第二个上不可用”。

我的意思是第2页中的这类内容失败了:

在第1页的情况下,同样的事情也适用于:

所以我认为我需要继续使用Phill建议的两个选项中的任何一个。

答案 6 :(得分:0)

我认为phil是正确的请求选项可用,直到页面加载。因此,如果我们想要将值发送到另一个页面,我们想要设置隐藏标签或者在会话旁边,如果您只需要在另一个页面上的值而不是更多,那么如果您需要该值,隐藏标签是最佳选择当时会话中的多个页面是比隐藏标签更好的选择。