我正在使用 Struts/JSP 作为 Web 应用程序。我有一个页面 A,我在其中收集用户定义的参数(因为请求参数不能使它们成为会话参数),然后我转到页面 B 向用户询问是/否类型的问题。如果是,我需要返回页面 A 并继续常规处理。但显然A页面的请求对象没有了。
有没有办法将页面 A 的请求对象设置为页面 B 中的参数,以便当我返回页面 A 时,我拥有与我第一次在那里(在页面 A 上)时相同的请求对象。
我需要如下所示的东西:
页面 A --(req1)------> 页面 B (set req.setAttr('prevReq', req1)) ------> 页面 A (req = req.getAttr('prevReq') )
如有任何帮助,我们将不胜感激。
不,你不能做你想做的事。您了解 HTTP 请求-响应周期是如何工作的吗?
您无法保存对页面 A 的请求,然后在页面 B 中响应该请求以使浏览器返回到页面 A。这不是请求-响应循环的工作原理。
您可以做的是将数据存储在会话对象中。您可以调用
request.getSession()
来获取 HttpSession
对象,您可以在该对象中存储该用户会话期间的数据。在A页面,可以再次从session对象中取出数据。
在多页面流程中,您需要将所有间歇收集的数据存储到会话中。 请参阅 HttpServletRequest.getSession() 和 HttpSession.setAttribute(String, Object)。
使用隐藏的输入元素(
input type="hidden"
),其中您保留表单提交的请求参数。不要将其复制/存储为请求属性。回复完成后他们就迷路了。
由于我不使用 struts,这里有一个 basic 示例,JSP 应该是什么样子(将输入标签和明显的安全问题(例如 XSS)留在考虑范围之外,Struts 应该足够聪明,可以自行处理)。
A页:
<form>
<input type="text" name="input1" value="${param.input1}">
<input type="text" name="input2" value="${param.input2}">
<input type="text" name="input3" value="${param.input3}">
<input type="hidden" name="yesorno" value="${param.yesorno}">
<input type="submit" value="go to page B">
<input type="submit" value="submit">
</form>
B页
<form>
<input type="checkbox" name="yesorno" value="yes" ${!empty param.yesorno ? 'checked' : ''}>
<input type="hidden" name="input1" value="${param.input1}">
<input type="hidden" name="input2" value="${param.input2}">
<input type="hidden" name="input3" value="${param.input3}">
<input type="submit">
</form>