мульти создание / редактирование в Grails - PullRequest
1 голос
/ 17 ноября 2010

Можно ли добавлять / обновлять более одного экземпляра одновременно? Например, у нас есть книга классов домена с bname, tile. В gsp мы показываем одну форму с несколькими полями bname и title. Может кто-нибудь дать мне знать, как написать / редактировать действия?

Ответы [ 3 ]

0 голосов
/ 19 ноября 2010

Использовал приведенный выше код в цикле и смог успешно добавлять / обновлять записи

для (i в 0..booksSize) {def book1 = новая книга (bname1, btitle1) if (! Book1.save ()) {flash.message = "error msg"}}

Если есть строки с ошибками / недействительными данными, как показать данные, введенные пользователем вместе с ошибками в cont / gsp?Сверху я получаю только ошибку последней строки.

0 голосов
/ 12 июня 2015

Я знаю, что это несколько лет, но я решил добавить обновленный ответ на этот общий вопрос.

Grails предоставляет несколько удобных инструментов, позволяющих обновлять несколько записей, используя объекты Command, 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 для обработки входных данных «массовой» формы, и каждый отдельный экземпляр все еще проходит проверку с ограничениями.

Вам потребуется импортировать ListUtils и FactoryUtils из коллекции общих файлов apache:

import org.apache.commons.collections.FactoryUtils
import org.apache.commons.collections.ListUtils

Он будет использоваться в таком действии:

def save(ShiftEntryListCommand cmd) {
    //other action code follows ...
}

Теперь все данные массовой формы, поступающие в метод сохранения, обрабатываются и проверяются объектами команды.Чтобы сохранить записи, вы можете просмотреть список по списку и вызвать save() для каждой из них или использовать метод Hybernate для массовых вставок.В нашем случае мы решили перебрать каждую запись.Не уверен, почему.

Надеюсь, кто-то найдет это полезным.

0 голосов
/ 17 ноября 2010

возможно. Вам нужно будет создать страницы bulkCreate / bulkUpdate с соответствующими методами контроллера и сервиса. Ничто не мешает вам сделать что-то подобное в службе:

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

вы, вероятно, хотите получить подтверждение там. bname1 и т. д. - это параметры, которые вы определяете в своей форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...