我们使用的是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 从一个操作传递到另一个操作。
我不能request.setAttribute()
在 ActionA 的末尾使用,因为当控件到达 ActionB 时,它现在有一个全新的请求对象。我猜测从一个动作到另一个动作的转发会刷新请求。但是,如果它转发到 jsp,请求将被保留。
不想将 orderId 存储在 session 中,session.setAttribute()
因为有人可能会尝试添加书签的 URL,然后该页面会简单地获取 session 中最后存储的 OrderId 并尝试处理它。
我们也无法将它放在 formbeans 中,因为它不是共享的。
一种选择是在 URL 中将其作为参数传递,例如 ActionB?OrderId=89 。然而,缺点是有人可以更改 URL 中的 orderId 并尝试获取该随机 orderId 的数据。虽然我们总是可以进行检查以防止未经授权的人查看属于另一个客户的订单,但目前这是一个复杂的过程。同样在 Struts 1.2.2 中,我认为我必须以编程方式创建一个新的 ActionForward 对象,然后在当前路径的末尾显式附加“?OrderId = 89”。
有帮助的朋友吗?