1

我对 Spring 非常陌生,并且已经获得了一些基本说明,可以将一些代码移动到使用 Spring 的新项目中,但我在使用 SimpleFormController 时遇到了问题(我被指示给用户)。

我有一个页面,当它加载时,它有一个下拉菜单,其中包含从数据库中填充的数据。从数据库中检索“消息”列表并作为属性传递给 JSP,然后填充下拉列表。选择其中一个“消息”时,表单显示在下拉下方下方,并填充了适当的数据。没有进行 DB 调用,因为在加载页面时会返回所有数据。这一切都是用 jQuery 完成的。单击更新按钮时,可以更改表单元素并将其保存到数据库中。

目前,代码是一个 portlet,doView 方法包含检索消息并将它们传递给 JSP 的逻辑。processAction 方法保存更改。

我无法弄清楚 SimpleFormController 的哪些方法。我被告知要使用 onSubmitAction 进行更新,但是向我展示如何操作的人不确定我在页面首次加载时使用什么方法来获取数据、保存该数据/模型并在JSP。我将使用 Spring 命令/表单将更改保存为一条消息,但我不会使用它来填充下拉列表和表单字段。

抱歉,如果这听起来像一个愚蠢的问题。我一直在查找教程,但没有找到我需要的答案 - 可能是因为我不确定问题是什么。

提前感谢卡罗琳的任何帮助

4

2 回答 2

1

听起来这个想法是表单支持对象绑定到表单,但是在页面加载时不会加载表单的初始数据(这就是您将使用 formBackingObject 方法的目的)。相反,您想要预加载一些其他数据,这些数据不会进入表单支持对象(“消息”列表),并且表单将基于该下拉列表通过 Ajax 进行初始化)。

因此,我认为您要使用的是 referenceData 方法。这允许您将所需的任何对象放入请求中,以便可以从 JSP 访问它们。您创建一个映射,然后将一个带有“messageList”键的消息对象列表插入到映射中。然后,您可以通过引用 ${messageList} 在 JSP 中获取消息。

于 2009-11-13T14:02:03.597 回答
0

我有一段时间没有这样做了,但让我们看看我是否记得正确。SimpleFormController 附加了一个对象,它将显示。它将使该对象的字段自动出现在您的请求中(至少是简单的)。

要将对象类型附加到 SimpleFormController,您需要使用setCommandNameandsetCommandClass方法(我曾经在构造函数中调用它们)。然后您将需要实现该formBackingObject方法 - 这是您检索对象(例如从数据库中)并将其设置在控制器中的位置。

要处理提交,您可以实现onFormSubmit- 在那里您可以访问一个命令对象,该对象具有来自您的 html 表单的所有新值(Spring 自动将请求值绑定到您的命令对象)。您可能希望在此方法中提交对数据库的更改。

您可以在请求中添加命令对象字段以外的其他参数。特别是,根据我的记忆,知道handleRequest第一个被调用,最后被调用是很有用的。showForm您需要查看文档 - 我认为 Spring 家伙推荐了一种添加特殊参数的特殊方法(不记得那是什么,我记得使用它时遇到了一些麻烦)。

如果您的命令对象中有特殊对象,spring 在显示 jsp 时不知道如何解释(我有一个字节值,它转换为从每周几天的复选框中选择的星期几),您可以编写自己的活页夹并通过实现该initBinder方法将它们附加到它们链接到的参数上。

希望这可以帮助。自从我使用它(大约 8 个月)以来,事情可能已经发生了变化,但是一旦你花时间阅读 Spring 代码和文档,这个想法就很简单了。

于 2009-11-13T09:57:35.000 回答