Список строк объекта домена - добавление на лету - PullRequest
0 голосов
/ 24 февраля 2012

Возможно, это проблема персистентности и объекта домена.Итак, у меня есть список заметок, которые можно добавить человеку.Мой класс person выглядит примерно так (я обернул объект в переходные процессы, чтобы игнорировать постоянство):

class Person {
...
List<String> notes = new ArrayList<String>()
...
}

Когда я обновляю человека с заметкой (текстовое поле в представлении позволит добавить заметку),Я хочу сделать что-то простое, например добавить новую заметку в список массивов, привязанный к человеку:

class PersonController {
...
def update() {
    def contactInstance = Contact.get(params.id)
    if (!contactInstance) {
        flash.message = message(code: 'default.not.found.message', args: [message(code: 'contact.label', default: 'Contact'), params.id])
        redirect(action: "list")
        return
    }

    if (params.version) {
        def version = params.version.toLong()
        if (contactInstance.version > version) {
            contactInstance.errors.rejectValue("version", "default.optimistic.locking.failure",
                      [message(code: 'contact.label', default: 'Contact')] as Object[],
                      "Another user has updated this Contact while you were editing")
            render(view: "edit", model: [contactInstance: contactInstance])
            return
        }
    }

    contactInstance.properties = params

    /**
     * Check for inactive - Then flag with user and date tag
     */
    if(params.isActive == null) {
        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm");
        Date date = new Date();
        contactInstance.properties.isActiveNote = "Made inactive by " + session.user + " on " + dateFormat.format(date) + "."
    }

    /**
     * Date stamp of the note itself
     */

    if(params.notes.equals("")) {}
    else {
        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm");
        Date date = new Date();
        //contactInstance.properties.notes = contactInstance.properties.notes + "    " + params.notes + " - (" + dateFormat.format(date) + " " + session.user + ");"
        contactInstance.allThese.add(contactInstance.properties.notes)
        println(contactInstance.allThese)
    }


    if (!contactInstance.save(flush: true)) {
        render(view: "edit", model: [contactInstance: contactInstance])
        return
    }

    flash.message = message(code: 'default.updated.message', args: [message(code: 'contact.label', default: 'Contact'), contactInstance.id])
    redirect(action: "show", id: contactInstance.id)
}
...
}

Вызов обновить из моего gsp:

<g:actionSubmit class="save" action="update" value="${message(code:'default.button.update.label', default: 'Update')}" />

Но это только кажетсяхранить массив с одной заметкой.Существует ли проблема с сохранением доменных объектов и коллекций Grails?Это вполне может быть простой проблемой с моей стороны!

Спасибо за помощь.

1 Ответ

0 голосов
/ 24 февраля 2012

Если ваше представление содержит несколько полей <input> или <textarea> с одним и тем же именем («заметки», чтобы соответствовать имени поля в вашем классе домена), Grails автоматически свяжет значения с вашим массивом notes.

Вы также можете взглянуть на новый метод params.list(), который позволит вам перебирать параметры запроса и затем добавлять их по отдельности в ваш массив.

...