我目前的任务是将我们的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 ,希望我能让我理解......])
我需要的工作流程是否可行? (希望你能指出我的一些文件或例子)
提前致谢, 苏珊。
答案 0 :(得分:0)
有很多可能性,这里有一些建议可以帮助您找到解决方案:
用户最友好的设计是在同一页面上创建所有三个对象(为什么用户想要在三个屏幕之间切换以设置新客户?)。这需要在页面上进行更多的工作,但您可以一次创建/编辑并保存客户。
如果您有单独的屏幕要添加Customer
,Address
& Contact
让用户从创建客户开始。保存。当用户在Address
ID上添加Customer
次传递时。保存链接到Customer
(您有id)。与Contacts
相同。
如果您不希望用户在添加Customer
之前明确保存Address
,则可以在用户点击&#34时自动保存Customer
。添加地址"在Customer
页面上。 Contacts
也是如此。
如果您不想向其他人展示未完成客户,可以在客户上添加 in 标记,以过滤未完成< / em> Customers
(或者您使用其他表格链接到未完成的用户,如果您不喜欢该客户的状态信息)。当用户最终确定Customer
已准备就绪(在save
页面上按Customer
)时,您将清除未完成状态(或将其从未完成的表中删除)使新Customer
对所有用户可见。
这样做你甚至可以从会话超时中恢复,并让用户继续创建客户。