Spring Advice - 提交表格

时间:2009-11-18 14:38:40

标签: java spring spring-mvc

我在使用Spring编写的代码存在严重问题,因此我决定从头开始并寻求建议。以下是我的要求:

  1. 当页面首次加载时,我需要一个从数据库中检索到的对象列表,我可以在JSP上访问它。
  2. 我使用此列表填充a 落下。
  3. 当用户选择时 从下拉的物体 下面的表格填充了 适当的数据(所有这一切 数据可用 在页面第一次检索时检索 载入)
  4. 用户可以修改此项     数据并提交表格。我需要     将此数据保存到数据库
  5. 的         页面应该重新加载和需要         检索对象列表         从他们那里再次来自DB         更改并列出此列表         可用于JSP。
  6. 我一直在使用SimpleFormController和referenceData()以及onSubmitAction()方法,但我不确定这是否是最佳解决方案。我认为我的问题是在onSubmitAction完成后,JSP中没有对象列表,因为在onSubmitAction()完​​成后没有调用referenceData()。

    如果这是一个愚蠢的请求,请道歉。我一直在谷歌搜索和寻找教程2天,我找不到一个能做我需要做的事情的例子。

    所以我的问题是我应该采用哪些方法来满足这些要求?

3 个答案:

答案 0 :(得分:1)

与使用基于注释的控制器的更新,更灵活的方式相比,使用Controller类层次结构的旧Spring方法存在许多缺点。

那就是说,您是否尝试在处理表单提交后发送重定向?这既解决了用户被提示的问题,如果他重新加载页面可以重新提交表单。

答案 1 :(得分:0)

关于你的问题让我感到困惑的是onSubmitAction()调用 - 你使用的是Spring portlet代码还是servlet代码?

如果您正在使用portlet代码,那么您应该可以覆盖onSubmitRender()以返回RedirectView将用户重定向回同一页面。如您所说,如果您使用与默认成功视图相同的页面,则不会返回referenceData()调用;如果您将用户重定向到页面,则用户将完成整个页面加载过程,其中包括referenceData()调用。所以你只需要包含一个重写的onSubmitRender(),它返回如下内容:

return new ModelAndView(new RedirectView(url, true));

如果您正在使用servlet代码,则没有onSubmitAction(),只有onSubmit() - 并且在重写的onSubmit()结束时,您将执行与上面相同的操作,返回一个新的RedirectView()到同一页。

答案 2 :(得分:0)

这可以通过几种不同的方式解决:

  1. 将您的successView设置为转发给表单命令的内容,就像它是初始请求一样(例如设置参数或指示不应重新提交表单的内容)
  2. successView重定向设置为原始表单。 (例如redirect:/some/url
  3. 让表单提交逻辑调用referenceData方法来填充所需的请求属性。
  4. 1和2具有重用现有表单显示逻辑的优点。此外,如果用户在提交表单一次后重新加载页面,则2具有避免提交的优点。