我正在使用Struts / JSP作为webapp。我有一个页面A,我正在收集用户定义的参数(因为请求参数不能使它们成为会话参数)然后我转到页面B向用户询问是/否的问题。如果是,我需要回到页面A并继续定期处理。但很明显,页面A的请求对象已经消失。
有没有办法将页面A的请求对象设置为页面B中的参数,这样当我回到页面A时,我有了相同的请求对象,当我第一次在那里时(第A页)。
我需要以下内容:
第A页 - (req1)------>第B页(设置req.setAttr('prevReq',req1))------>第A页(req = req.getAttr('prevReq'))
感谢任何帮助。
答案 0 :(得分:2)
不,你不能做你想到的。您是否了解HTTP请求 - 响应周期的工作原理?
您无法保存页面A的请求,然后在页面B中响应该请求以使浏览器返回到页面A.这不是请求 - 响应循环的工作方式。
您可以做的是将数据存储在会话对象中。您可以调用request.getSession()
来获取HttpSession
对象,您可以在该对象中存储该用户会话期间的数据。在页面A中,您可以再次从会话对象中获取数据。
答案 1 :(得分:0)
在多页面处理中,您需要将所有间歇收集的数据存储到会话中。请参阅HttpServletRequest.getSession()和HttpSession.setAttribute(String, Object)。
答案 2 :(得分:0)
使用隐藏的输入元素(input type="hidden"
),其中保留表单提交的请求参数。不要将其复制/存储为请求属性。他们在回复完成后迷路了。
由于我没有struts,这里是一个基本示例,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>
Page 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>