在JSP页面中使用request.setAttribute
是否可以在JSP页面上使用request.setAttribute
,然后在HTML Submit上获取Servlet
的相同请求属性?
不幸的是,Request对象只有在页面加载完成后才可用 – 一旦完成,你将丢失其中的所有值,除非它们存储在某个地方。
如果要通过请求保留属性,则需要:
- 在表单中有一个隐藏的输入,例如
" />
。 然后,它将在servlet中作为请求参数提供。 - 把它放在会话中(参见
request.getSession()
– 在JSP中这可以作为简单的session
)
我建议使用Session,因为它更容易管理。
Phil Sacre的回复是正确的,但会议不应仅仅用于它的地狱。 您只应将此值用于会话生命周期中真正需要的值,例如用户登录。 通常会看到人们过度使用会话并遇到更多问题,特别是在处理集合或用户返回他们之前访问过的页面时,发现他们的值仍然保留在之前的访问中。 智能程序尽可能地最小化变量的范围,坏的程序使用会话太多。
如果您希望持续请求,请尝试以下操作:
示例:在JSP或servlet页面上
request.getSession().setAttribute("SUBFAMILY", subFam);
并在任何接收页面上使用以下行来检索您的会话和数据:
SubFamily subFam = (SubFamily)request.getSession().getAttribute("SUBFAMILY");
您可以使用pageContext属性执行此操作:
在JSP中:
<% 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属性。
尝试
request.getSession().setAttribute("SUBFAMILY", subFam); request.getSession().getAttribute("SUBFAMILY");
纠正我,如果错了……我认为请求确实在连续页面之间存在..
想想你从第1页 – >第2页 – >第3页遍历。
您使用第1页的setAttribute在请求对象中设置了一些值,您可以使用getAttribute在第2页中检索,然后如果您尝试在同一请求对象中再次设置某些内容以在第3页中检索它,那么它将无法为您提供空值“创建JSP的请求,以及在提交JSP时生成的请求是完全不同的请求,第一个上放置的任何属性都不会在第二个上提供“。
我的意思是第2页中的这类内容失败了:
在第1页的情况下,同样的事情是这样的:
所以我想我需要继续Phill建议的两个选项中的任何一个。
我认为phil是正确的请求选项可用,直到页面加载。 因此,如果我们想要将值发送到另一个页面,我们想要设置隐藏标记或者在会话中,如果您只需要在另一个页面上的值而不是更多,那么如果您需要该值,则隐藏标记是最佳选项当时会话中的多个页面是比隐藏标签更好的选择。