1

我有两个页面,比如 A 和 B。用户从页面 A 导航到页面 B。Page-B 需要有一些从 Page-A 传递过来的值。在这些值中,其中一些是对象。现在我有以下方法将参数传递给Page-B

  • 将对象存储在某个范围内(例如会话、页面流)。
  • 将对象转换为字符串后将其作为查询字符串传递。

上述两种方式的缺点分别如下:

  • 如果用户将 Page-B 加入书签以供以后使用并尝试从不同的会话中访问它,则会生成异常。由于对象不存在于范围内。
  • URL 的长度有限制,为 2048 个字符 ( ref )。因此,如果我将其转换为 JSON 并尝试通过 URL 传递它,并且如果 JSON 字符串超过限制的字符,我将从 Page-B 获得 JSON 异常。

我可以压缩对象的字符串表示,使其不会超过限制字符吗?

我该如何解决这个问题(通过任何其他方式)?

非常感谢任何解决方案。

4

1 回答 1

1

将序列化对象放在 URL 中是一个非常糟糕的主意。如果您想通过 URL(GET 参数)访问状态,那么通常 URL 应该只包含某种标识相关项目的方法。

幸运的是,如果您使用数据库后端来保存对象,那么数据库通常会以主键的形式为您提供标识。然后,您可以将 ID 放入 URL 中,让 Java 在收到请求时检索该 ID 的对象。

如果您不使用数据库后端,那么您可以为您的对象提供一个可以定位它们的身份。最简单的解决方案是将对象的引用存储在映射中,并将映射键放在 URL 中。

于 2013-09-02T08:06:46.737 回答