2015-05-13 6 views
1

У меня есть категория объектов домена с hasMany относительно объекта домена атрибутовGrails: Как обрабатывать мультивыбор в контроллере с помощью лесов при хранении без выбора?

class Category { 
    Collection<Attribute> attributes = [] 
    static hasMany = [attributes:Attribute] 

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

class CategoryController { 
    static scaffold = true 
} 

Это визуализируется для зрения как поле выбора, такие как это:

<select id="attributes" class="many-to-many" size="5" multiple="multiple" name="attributes"> 
<option value="1">entry 1</option> 
<option value="2">entry 2</option> 
</select> 

При выборе какого-либо не записи из поля выбора, при отправке формы ничего не отправляется. Таким образом, де-выбор всех записей в поле выбора не сохраняется, но вместо этого все значения, которые были сохранены до этого, остаются такими.

Я попытался добавить собственный beforeValidate метод (смотри ниже, аналогично решению, описанному в a reply to the question mentioned above) на мой CategoryController, но из-за леса он не получает казнены (если я не ошибаюсь, и есть другая причина):

def beforeValidate() { 
    def categoryInstance = Category .get(params.id) 
    if (!categoryInstance) { 
     flash.message = message(code: 'default.not.found.message', args: [message(code: 'categoryInstance.label', default: 'Category'), params.id]) 
     redirect(action: "list") 
     return 
    } 
    if (!(params?.attributes)) { 
     categoryInstance.attributes.clear() 
    } 
} 

Я в затруднении относительно того, что теперь делать. Forego scaffolding для этого контроллера и использовать мой собственный метод beforeValidate? Поддерживать строительные леса и внедрять метод в другом месте? Сделайте что-нибудь еще?

ответ

0

После прочтения на нескольких веб-сайтах, что строительные леса Грааля предназначены только для того, чтобы обеспечить грубую схему, которую нужно заполнить, чтобы достичь более мелкомасштабного поведения, я обосновался на выводе строительных лесов и создал свои собственные контроллеры и виды, а затем адаптировал их, изменив их методы обновления. Для будущих посетителей этого вопроса, как создать контроллеры и представления: https://grails.github.io/grails-doc/latest/ref/Command%20Line/generate-all.html