2010-11-17 52 views
1

是否可以一次添加/更新多个实例?例如,我们有一个带有bname,tile的域类书。在gsp中,我们正在显示一个包含多个bname和标题文件的表单。任何人都可以让我知道如何编写crteate /编辑操作?在grails中多创建/编辑

回答

0

这是可能的。您需要创建bulkCreate/bulkUpdate页面,并附上适当的控制器和服务方法。没有什么可以阻止你在服务中执行类似如下的操作:

def book1 = new Book(bname1, btitle1) 
def book2 = new Book(bname2, btitle2) 
book1.save() 
book2.save() 

你可能想在那里进行验证。 bname1等是您在表单中定义的参数。

+0

Thanks hvgotcodes – Honey 2010-11-18 04:05:33

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方法进行批量插入。在我们的案例中,我们选择循环播放每条记录。不知道为什么。

希望有人认为这有用。