2014-02-25 4 views
0

Я новичок в Grails и, очевидно, что-то пропустил ... но что ?!Как выбрать несколько значений из ограничения inList в Grails?

Я создал DomainClass An с категорией свойств String. В ограничениях я определил, что эта категория должна иметь несколько (список) значения:

class An { 
String category 
static constraints = { 
    category nullable: true, inList:["do", "me", "a", "favour"] 
} 
} 

По мнению показано, как множественного выбора коробки:

<g:select name="category" from="${anInstance.constraints.category.inList}" 
      value="${anInstance?.category}" 
      valueMessagePrefix="a.category" 
      noSelection="${['': 'Please select one ...'}" 
      multiple="multiple" size="5"/> 

способа сохранения стандартно:

def save = { 
def anInstance = new An(params) 
    if (anInstance.save(flush: true)){ 
     flash.message = "${message(..)}" 
     redirect(action: "show", id: anInstance.id) 
    } else { 
     render(view: "create", model: [anInstance: anInstance]) 
    } 
} 

Когда я выбираю/сохраняю только одно значение, он выбирается/отображается/сохраняется как ожидалось. Когда я хочу, чтобы выбрать/сохранить много значений из этого списка, я получил сообщение о том, что seleced значения не в списке (default.not.inlist.message):

Property [category] of class [class An] with value [do, me, a, favour] is not contained within the list [[do, me, a, favour]]. 

Любой намек ценится.


EDIT:

Как Mr.Cat отметил, одна из моих ошибок было определить свойство категории, как String и не List<String>. Теперь выбранные значения отображаются как выбранные, но сообщение об ошибке (default.not.inlist.message) по-прежнему остается.

+0

Можете ли вы вставить возвращенную ошибку и код, который выполняет операцию сохранения? – lucke84

+2

Но почему вы пытаетесь установить список значений String простой переменной String несколькими select? –

+0

Что произойдет, если вы измените свое ограничение на 'inList: [" do "," me "," a "," favor "]. Permutations() as List'? Вам нужно будет изменить свой тег select, чтобы получить его значения из другого места. – doelleri

ответ

1

выбор нескольких элементов в окне выбора вызывает то, что в контроллере вы получите список строк, а затем вы пытаетесь сохранить этот список в одном поле Строки, которая, очевидно, неправильно, и, в частности оленьей кожи проходить costraint

+0

Я читал ваш ответ слишком поздно ... но мистер Кэт указал мне в том же направлении. – mika

0

Переключите ограничение от

category nullable: true, inList:["do", "me", "a", "favour"] 

в

category nullable: true, inList: (["do", "me", "a", "favour"].subsequences() as List) 

это будет генерировать следующие, которые должны охватывать все основания:

[[do, me, a, favour], [a, favour], [a], [me, a, favour], [do, a], [do, me, a], [do, a, favour], [me], [favour], [do, me, favour], [do, me], [me, favour], [do], [me, a], [do, favour]] 
+0

С этим я до сих пор получаю сообщение об ошибке (default.not.inlist.message): Свойство [category] класса [класс An] со значением [do, me] не содержится в списке [[do, me], [ do], (и т. д.)]. – mika

+0

Что такое разрешенное сообщение (с аргументами и все такое)? – doelleri

+0

Свойство [категория] класса [класс An] со значением [[[a], [me]]] не содержится в списке [[[[do, me, a, favor], [a, favor], [a ], [me, a, favor], [do, a], [do, me, a], [do, a, favor], [me], [favor], [do, me, favor], [do , я], [do], [me, favor], [me, a], [do, favor]]] .. извините, в моем предыдущем посте я забыл о двух дополнительных квадратных скобках. – mika

 Смежные вопросы

  • Нет связанных вопросов^_^