Командные объекты Grails и значения входных имен - PullRequest
1 голос
/ 17 августа 2011

У меня есть форма, где я должен заказать элементы ввода, заказанные специально. Итак, моя форма выглядит примерно так:

<input type="text" name="name"/>
<select name="contacts.first">...</select>
<select name="contacts.second">...</select>
...

У меня есть объект команды, который я пытаюсь использовать для проверки этой формы. Тем не менее, я не могу заставить его отображаться правильно. Мой командный объект выглядит так:

@Validatable
class MyCommand {
     def name
     def contacts

     static constraints = { /* ... */ }
}

Действие моего контроллера выглядит так:

def update = { MyCommand cmd -> 
    if (cmd.validate()) {
         /* ... */
    }
}

Когда я смотрю на cmd.contacts, это ноль. Если я назову каждый выбор просто contacts вместо contacts.first, это будет массив значений, как и ожидалось, но я не хотел зависеть от браузера, чтобы убедиться, что эти элементы расположены в определенном порядке. Любые предложения, чтобы сделать эту работу? Правильный порядок имеет решающее значение.

1 Ответ

2 голосов
/ 24 августа 2011

Оригинальная идея: http://stateyourbizness.blogspot.com/2009/02/binding-to-collection-fields-on-command.html

Так что для вашего командного объекта вы можете использовать:

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

class MyCommand {
    def name
    List contacts = ListUtils.lazyList([], FactoryUtils.constantFactory(''))
    /* ... */
}

И ваш HTML будет выглядеть так:

<input type="text" name="name"/>
<select name="contacts[0]">...</select>
<select name="contacts[1]">...</select>
...