SimpleFormController的帮助

时间:2009-11-13 09:48:18

标签: spring spring-mvc portlet

我是Spring的新手,我已经获得了一些基本的指令,可以将一些代码移动到一个使用Spring的新项目中,我遇到了SimpleFormController(我被用户指示)的问题。

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

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

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

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

提前感谢您的帮助 卡罗琳

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

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

您可以添加除请求中的命令对象字段之外的其他参数。特别是,知道首先调用handleRequest并从我记忆中调用showForm是有用的。你需要查看文档 - 我认为Spring的人推荐一种特殊的方法来添加特殊的参数(不记得是什么,我记得在使用它时遇到了一些麻烦)。

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

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