如何使用hasmany域编辑和提交域

时间:2014-07-19 10:27:38

标签: grails

我目前的任务是将我们的java应用程序代码移动到Web应用程序。 我决定用grails来完成这项任务。 (我已经在grails中开发了一些简单的应用程序,并且它们运行良好。)

但有一种行为,我有严重的问题。

提供域模型:
客户有很多地址
地址属于客户并且有许多联系人
联系人属于地址

编辑:因为我使用“belongsTo”设置,所以级联保存不会成为问题(我认为)。

我需要什么: 在创建客户时,我需要附加一些地址的可能性,我应该有可能添加一些联系人。 但是在客户视图中按下保存按钮后,所有这些都应该提交到数据库。 (与编辑客户相同......)

目前的行为: 使用默认控制器和视图,我首先需要提交客户,然后可以添加与联系人相同的地址(首先提交地址,然后添加联系人)。

编辑:
(据我所知)数据绑定默认用在“generate-controller”和“generate-view”结果类中。
我不知道的是,如何处理网页流,我可以添加地址和几个联系人,而不保存客户域。并且在视图之间切换多次“customer.create”,“address.create”和“contact.create”,整个​​结构仍然存在。
(我试图在session-object中保存customer-domain,在create.address视图中保存方法,我从会话中获取客户并将addressInstance添加到客户的地址列表中,再次保存客户会话并切换回customerInstance的一个新的editSession-action,它从会话中获取要编辑的实例。但在我看来,只有customerInstance包含在会话中而不是关联的对象... [omg ,希望我能让我理解......])

我需要的工作流程是否可行? (希望你能指出我的一些文件或例子)

提前致谢, 苏珊。

1 个答案:

答案 0 :(得分:0)

有很多可能性,这里有一些建议可以帮助您找到解决方案:

用户最友好的设计是在同一页面上创建所有三个对象(为什么用户想要在三个屏幕之间切换以设置新客户?)。这需要在页面上进行更多的工作,但您可以一次创建/编辑并保存客户。

如果您有单独的屏幕要添加CustomerAddress& Contact让用户从创建客户开始。保存。当用户在Address ID上添加Customer次传递时。保存链接到Customer(您有id)。与Contacts相同。

如果您不希望用户在添加Customer之前明确保存Address,则可以在用户点击&#34时自动保存Customer。添加地址"在Customer页面上。 Contacts也是如此。

如果您不想向其他人展示未完成客户,可以在客户上添加 in 标记,以过滤未完成< / em> Customers(或者您使用其他表格链接到未完成的用户,如果您不喜欢该客户的状态信息)。当用户最终确定Customer已准备就绪(在save页面上按Customer)时,您将清除未完成状态(或将其从未完成的表中删除)使新Customer对所有用户可见。

这样做你甚至可以从会话超时中恢复,并让用户继续创建客户。