是否可以一次添加/更新多个实例?例如,我们有一个带有bname,tile的域类书。在gsp中,我们正在显示一个包含多个bname和标题文件的表单。任何人都可以让我知道如何编写crteate /编辑操作?在grails中多创建/编辑
1
A
回答
0
这是可能的。您需要创建bulkCreate/bulkUpdate页面,并附上适当的控制器和服务方法。没有什么可以阻止你在服务中执行类似如下的操作:
def book1 = new Book(bname1, btitle1)
def book2 = new Book(bname2, btitle2)
book1.save()
book2.save()
你可能想在那里进行验证。 bname1等是您在表单中定义的参数。
0
使用上述代码在一个循环,并能(在0..booksSize I)添加/更新记录成功
为{ 高清BOOK1 =新的图书(bname1,btitle1) 如果(!BOOK1 .save()){ flash.message =“错误消息” }}
如果有与错误/无效数据如何显示随着CONT/GSP错误输入的数据用户的任何行?从上面我只得到最后一行错误。
0
我知道这是几岁,但我想我会为这个常见问题添加一个更新的答案。
Grails提供了一些方便的工具来允许使用Command Objects,ListUtils和FactoryUtils进行多记录更新。
下面是可能被用于保存多个时间卡移项的例子:
class ShiftEntryListCommand {
List<ShiftEntryCommand> entries = ListUtils.lazyList(
new ArrayList(), FactoryUtils.instantiateFactory(ShiftEntryCommand)
)
}
class ShiftEntryCommand {
BigDecimal totalHours
Date date
String projectName
static constraints = {
totalHours (blank: false, min: 0.00, max: 24.00, matches: /^someRegex$/)
date (blank: false, matches: /^someRegex$/)
projectName (nullable: true, blank: true, matches: /^someRegex$/)
}
}
实质上是创建两个命令对象。一个用于表单数据的单个实例,另一个用于单个实例的列表。 list命令对象使用ListUtils和FactoryUtils来处理“批量”表单输入,并且每个单个实例仍然通过约束进行验证。
您需要从Apache公地集合导入ListUtils和FactoryUtils:
import org.apache.commons.collections.FactoryUtils
import org.apache.commons.collections.ListUtils
这将在行动中使用这样的:
def save(ShiftEntryListCommand cmd) {
//other action code follows ...
}
现在所有散装形式的数据来保存方法是由命令对象处理和验证。要保存记录,您可以遍历列表并在每个记录上调用save()
,或者使用Hybernate方法进行批量插入。在我们的案例中,我们选择循环播放每条记录。不知道为什么。
希望有人认为这有用。
Thanks hvgotcodes – Honey 2010-11-18 04:05:33