【发布时间】:2012-08-16 10:48:55
【问题描述】:
我们使用的是struts 1.2.2,这里有一个情况。 所以我们有 2 个表格 FormA 和 FormB。 我们还有 2 个动作 ActionA 和 ActionB。
现在,ActionA 在被调用时将 FormA 作为提交的 bean。它完成所有处理,保存表单,创建 OrderId,如果成功则转发给 ActionB。 ActionB然后根据OrderId填充FormB,然后转发到下一个jsp。
我们不希望这 2 个动作共享一个表单,因为内容非常不同,我们希望表单仅代表它在 jsp 页面上所代表的内容。同样在每个页面上,我们都将内容保存在 Db 中。流程有 5 页,2 页后可以离开 - 再次返回并从第 1 页开始。但第 1 页和第 2 页应该从数据库中检索数据并显示。因此,如果存在 orderID,我们会根据该 orderId 通过从数据库中获取数据来填充表单。
但是,我没有找到一种简单的方法将此 orderId 从一个操作传递到另一个操作。
我不能在 ActionA 的末尾使用request.setAttribute(),因为当控件到达 ActionB 时,它现在有一个全新的请求对象。我猜测从一个动作到另一个动作的转发会刷新请求。但是,如果它转发到 jsp,则保留请求。
不想将会话中的 orderId 存储为 session.setAttribute(),因为有人可能会尝试使用书签 URL,然后该页面会简单地获取会话中最后存储的 OrderId 并尝试处理它。
我们也不能把它放在 formbeans 中,因为它不是共享的。
一种选择是将 URL 作为参数传递,例如ActionB?OrderId=89 。然而,缺点是有人可以更改 URL 中的 orderId 并尝试获取该随机 orderId 的数据。虽然我们总是可以进行检查以防止未经授权的人查看属于其他客户的订单,但目前这是一个复杂的过程。同样在 Struts 1.2.2 中,我认为我必须以编程方式创建一个新的 ActionForward 对象,然后在当前路径的末尾显式附加“?OrderId=89”。
有帮助的朋友吗?
【问题讨论】: