【问题标题】:MVC - controller-to-controller in java EEMVC - java EE 中的控制器到控制器
【发布时间】:2015-06-14 06:24:59
【问题描述】:

在学校,比如说工资单申请,我的教授执行以下逻辑流程:

  • 默认页面是 index.jsp 页面。
  • 单击添加按钮时,将调用 addform.jsp 页面,用户可以在其中输入工资单数据
  • 单击提交按钮时,addform.jsp 页面将调用处理表单并将其添加到表中的 servlet。
  • 假设insert语句完美运行,输入数据没有问题,servlet会调用add.jsp页面。这包含用户之前输入的输入数据,通知用户数据已成功插入表中,以及“工资单列表”链接。
  • 单击“工资单列表”链接时,会调用另一个 servlet,该 servlet 处理表中的所有行以供查看。
  • 最后,将包含表中所有数据的结果集绑定到请求对象,然后 servlet 将调用 list.jsp 以查看表中的所有数据。

他说MVC应该是这样做的。

但是,我不喜欢插入数据后,必须创建另一个jsp页面来显示输入数据并通知用户数据已成功插入。如果插入不成功,为什么不直接进入 list.jsp 页面和 error.jsp 页面?所以我想到了以下做我想做的事:

  • 假设insert语句完美运行并且输入数据没有问题,servlet将调用另一个servlet来处理表中的所有数据。
  • 最后,将包含表中所有数据的结果集绑定到请求对象,然后 servlet 将调用 list.jsp 以查看表中的所有数据。

但是当我应该重定向到视图时调用另一个控制器时,我不确定这是否仍然是 MVC。是我的方法在 MVC 和用户友好方面更好还是我教授的方法更好?

【问题讨论】:

    标签: jsp jakarta-ee servlets design-patterns model-view-controller


    【解决方案1】:

    首先,你的老师并没有真正使用 MVC,因为一半的页面是在没有通过控制器的情况下显示的:index.jsp 视图直接显示,addform.jsp 也是如此。

    是显示结果页面还是直接返回列表与MVC无关。这只是一个功能/用户体验的选择。有时返回列表更好,有时返回创建产品的详细信息页面更好。例如,用户可能想要修复他在创建产品时犯的错误。或者他可能想提供有关产品的更多信息,或者其他什么。

    再次进入错误页面是一种用户体验选择。我一般不会那样做。相反,我会重新显示允许创建产品的页面,并显示有意义的错误消息,解释为什么无法创建产品以及用户应如何修复表单中的数据。

    关于在成功创建后执行返回列表的方式,您的执行方式并不是最好的方式。 POST 成功后,您应该重定向。这被称为Post-Redirect-Get pattern。它有很多好处:

    • 服务器端工作流程简单,职责隔离
    • 允许用户在不重新发布产品的情况下刷新页面
    • 允许用户为列表页添加书签并实际为列表页添加书签,而不是为处理创建的 servlet 的 URL 添加书签。

    当然,如果你想回到产品详情页面也是如此:你应该重定向。

    【讨论】:

      猜你喜欢
      • 2012-05-01
      • 2015-12-28
      • 2013-12-21
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 2012-12-16
      • 1970-01-01
      相关资源
      最近更新 更多