2008-10-23 30 views

回答

23

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

如果你想坚持通过请求属性,您需要:

  1. 有一个隐藏的输入您的形式,如<input type="hidden" name="myhiddenvalue" value="<%= request.getParameter("value") %>" />。这将作为请求参数在servlet中可用。
  2. 把它放在会议(见request.getSession() - 在JSP这可作为简单session

我建议使用会话,因为它更易于管理。

+0

也许这不是不幸。 JSP脚本是一个不好的习惯。使用会话时要小心,管理起来比较容易,但有时在可伸缩性方面它是“昂贵的”。 – 2008-10-23 14:43:33

1

纠正我,如果错了...我想请求不连续的页面之间仍然存在..

认为你从第1页穿越 - >第3页。

您有一定的价值 - 2>页使用getAttribute在页面2中检索到的页面1中的setAttribute设置请求对象,然后如果您尝试在同一个请求对象中再次设置某些内容以在页面3中检索它,那么它将给予您空值作为“创建的请求JSP和提交JSP时生成的请求是完全不同的请求,并且放在第一个上的任何属性在第二个上将不可用“。

我的意思是在第2页是这样的失败:

凡为同样的事情已经在第1页的情况下,像工作:

所以我想我会需要进行任Phill建议的两个选项。

4

Phil Sacre的回复是正确的,但是会话不应该只用于它的地狱。您只应将此用于确实需要在会话的整个生命周期中生存的值,例如用户登录。通常会看到人们过度使用会话并遇到更多问题,特别是在处理收藏或用户返回他们以前访问过的页面时,只发现他们的值仍然来自上次访问。一个聪明的程序尽可能地减少变量的范围,坏的程序会使用会话太多。

0

我认为菲尔是正确的请求选项是可用的,直到页面加载。所以如果我们想将价值发送到另一个页面,我们希望将其设置在隐藏标签中或在会话中设置,如果您只需要其他页面上的值而不超过该值,那么隐藏标签是最好的选择,如果您需要该值在当时的多个页面上,会话比隐藏的标签更好。

2

尝试

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

如果你希望你的要求仍然存在,试试这个:

例如:你的JSP或Servlet页面

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

上任何接收页面上使用下面的线路检索您的会话和数据:

SubFamily subFam = (SubFamily)request.getSession().getAttribute("SUBFAMILY"); 
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属性。