【问题标题】:Different views with Spring's SimpleFormControllerSpring 的 SimpleFormController 的不同视图
【发布时间】:2010-10-20 05:05:38
【问题描述】:

我正在使用 Spring 的 SimpleFormController 进行表单处理。就我而言,编辑视图 (JSP) 可能会根据正在编辑的内容而有所不同。 SimpleFormControllerformView 是一个字段(类变量),这意味着它由使用它的实例的所有线程共享。因此在formBackingObject 中设置formView(通过setFormView)是不安全的(也不合适)。我的问题是,是否可以根据某些上下文将SimpleFormController 与不同的编辑视图一起使用?

跟进:查看源代码后,我似乎可以覆盖showForm(HttpServletRequest req, HttpServletResponse resp, BindException errors) 并使用我想要的任何视图调用showForm(HttpServletRequest req, BindException errors, String viewName)

【问题讨论】:

  • 该死,我正在打字,你回答自己的问题更快:) 祝你好运。一旦你将它追溯到顶部,它就很容易使用 - 但我希望它更好。我对注释方法没有运气 - 它只是让我感到困惑,我宁愿用控制器接口编写我自己的控制器。
  • 我应该指出,到目前为止,我已经有更多的时间来学习和使用 Spring 中的注释控制器,它们非常棒。不过,转换服务需要更多的工作来处理泛型类型(例如包含特定有界类型的 List 实例)。

标签: java spring


【解决方案1】:

我相信 SimpleFormController 提供了两个“showForm”保护方法。这些可以被覆盖并且 BindException 用于检索作为您的表单对象的“目标”,然后您可以根据任何绑定的表单对象属性返回一个 ModelAndView。您还应该看一下 processFormSubmission,它规定了真正调用了哪些方法。另一种方法是“isFormChangeRequest”,它确定您的表单是否应该更改 - 您可以使用它来将其设置为 true,然后它将使用请求、响应等调用 showForm,然后您可以重新检查请求。

学习如何使用此层次结构的唯一方法是检查它。它不是很好 - 它提供了很多东西,但不是很好。 Spring MVC 通常需要扩展才能使其非常有用。

【讨论】:

  • 我很想听听更多关于您认为 Spring MVC 中的打包控制器没有“做得很好”的内容。就我个人而言,我发现它们作为起点非常有用
  • 它们作为一个起点很好,但它们提供了太多受保护的方法,您必须随后追溯到调用它的源头。此外,如果您想以不同的方式使用他们的控制器,则很难找到副作用。例如,我有一个表单控制器,我必须存储表单对象,以便它可以重定向到另一个控制器,该控制器使用会话中的对象来显示数据 - 但对我来说,表单控制器删除了对象
  • ...现在,Javadoc 上确实对某些方法这么说,但是受保护的方法太多,很难找到真正需要使用的方法。层次结构太复杂了——名称中带有“Simple”的类扩展了六个类(忽略对象扩展),并且可能有大约 50 个方法,这是荒谬的,并且是糟糕设计的关键指标。扩展太多,用处不够。
【解决方案2】:

我认为使用 SimpleFormController 是不可行的。

您可以尝试停止使用无论如何都将被弃用的控制器层次结构类,并查看 Spring 2.5 引入的基于注释的控制器。它们允许更灵活的表单处理。如果您不喜欢自动注射,请不要推迟。尽管没有一个示例真的很明显,但您可以使用注释驱动的控制器并在 XML 内容中定义所有 bean。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多