24

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

4

7 回答 7

26

不。不幸的是,请求对象仅在页面完成加载之前可用 - 一旦完成,您将丢失其中的所有值,除非它们已存储在某处。

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

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

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

于 2008-10-23T14:29:15.320 回答
4

Phil Sacre 的回答是正确的,但是会话不应该仅仅用于它的地狱。您应该只将它用于真正需要在会话生命周期内存在的值,例如用户登录。通常会看到人们过度使用会话并遇到更多问题,尤其是在处理集合时,或者当用户返回他们之前访问过的页面时,却发现他们仍然有之前访问过的值。一个聪明的程序尽可能地最小化变量的范围,一个糟糕的程序会过多地使用会话。

于 2008-10-25T19:04:14.527 回答
4

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

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

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

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

SubFamily subFam = (SubFamily)request.getSession().getAttribute("SUBFAMILY");
于 2014-03-13T17:57:49.250 回答
4

但是,您可以使用 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 模式):

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

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

于 2014-09-25T08:37:09.297 回答
2

尝试

request.getSession().setAttribute("SUBFAMILY", subFam);
request.getSession().getAttribute("SUBFAMILY");
于 2010-04-07T09:40:46.533 回答
1

如果错了请纠正我...我认为请求确实在连续页面之间持续存在..

假设您从第 1 页--> 第 2 页--> 第 3 页遍历。

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

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

在第 1 页的情况下,同样的事情也有效,例如:

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

于 2008-10-24T03:43:07.933 回答
0

我认为 phil 是正确的请求选项在页面加载之前可用。因此,如果我们想将值发送到另一个页面,我们希望在隐藏标签或会话中设置在那个时候在多个页面上会话是比隐藏标签更好的选择。

于 2009-10-13T12:20:46.710 回答