1

这是我们正在使用Spring MVC 2.5、jsp、Java7、Ajax 和 HTML5 进行的一个新项目。就我而言,我将拥有 7-10 个 jsp 页面,每个页面包含一个表单。这些页面是连续的。即一个人必须成功通过第一页才能进入第二页,通过第二页才能进入第三页,依此类推。

为了持久化数据,必须到达最后一页(成功通过其余页面后)并确认信息正确。一旦用户确认,我必须持久化存储在 bean 或会话中的所有数据(全部或无)。不应保留不完整的数据。让我们称我们的数据库表为“员工”

我是 Spring MVC 的新手,但得到了这个想法并使用控制器实现了页面流。

我的问题是我应该需要一个模型类或 bean 来存储所有数据,还是使用 session 来存储每个页面信息并将其保留在 session 中直到它被持久化?

或者最好有一个模型类,但有多个控制器/bean 来控制每个页面的数据流。你推荐哪一个?是否已经实施了任何设计模式来回答我的问题?如果您有更好的想法,请随时讨论您的想法。

4

2 回答 2

3

正如您已经提到的,有两种方法。使用哪一个取决于数据大小和其他要求,例如,用户是否可以稍后回来并从他离开的地方继续。模型和控制器不必只是一个。可以适当设计。

a)在会话中存储来自每个屏幕的数据:

  • 优点:不需要的数据不会持久化到数据库。当用户在屏幕上来回移动时,可以在会话内操作数据,因此速度更快。

  • 这种方法的缺点:会话中的信息过多会导致内存问题。在会话故障转移期间可能不是很有帮助。如果需要此功能,用户无法重新登录并从用户离开的地方继续。

b)在用户继续移动时保留每个屏幕数据:

  • 优点:会话更轻量,因此会话中只存储最少的相关信息。用户可以重新登录并从用户离开的地方继续。可以使用单独的正在进行的数据库表来存储此信息,并且仅在最终提交时将数据插入/更新到实际表中,否则数据库将包含大量未提交的数据。这样,可以定期清理正在进行的数据库。
  • 缺点:需要对每个屏幕进行数据库调用以持久化和检索,即使它可能不是由用户提交的。
于 2013-04-12T21:01:23.713 回答
2

您使用 HTTP 会话存储表单状态是正确的。

还是使用 session 来存储每个页面信息并将其保留在 session 中直到它被持久化?

因为这个要求:

不应保留不完整的数据

至于

我是否需要一个模型类或 bean 来存储所有数据

您可以根据需要对此进行建模。也许是一个模型来表示流程,然后是每个页面的对象。取决于数据在页面之间的拆分方式。

尽管如上面的评论中所述,您也许可以使用 WebFlow 来实现这一点。然而,这最终只是 Spring MVC 之上的一个轻量级框架。

于 2013-04-12T20:46:27.527 回答