Привязка данных к перечислению по команде в Grails - PullRequest
4 голосов
/ 29 августа 2011

У меня есть класс:

class User {
    Set<Foo> foos = []
}

, где Foo - это перечисление:

class Foo { A, B, C, D}

У меня есть действие контроллера с параметром типа User

def someAction = {User user ->
    // impl omitted   
}

Я создал мульти-выбор в GSP

<g:select name="foos" multiple="true" from="${Foo.values()}"/>

Но когда я отправляю форму, выбранные значения не привязываются к свойству foos Userкомандный объект.Что я делаю не так?

Ответы [ 2 ]

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

http://www.grails.org/TipsAndTricks

Использование Enum

Если вы хотите использовать Enum со строковым атрибутом «value» (довольно распространенная идиома) в элементе, попробуйте следующее:

enum Rating {
    G("G"),PG("PG"),PG13("PG-13"),R("R"),NC17("NC-17"),NR("Not Rated")

    final String value

    Rating(String value) { this.value = value }

    String toString() { value }

    String getKey() { name() } 
}

Затем добавьте optionKey = "key" к вашему тегу. Кредит: Грегг Болингер

0 голосов
/ 30 августа 2011

По сути, это не будет ответом.Но я не могу опубликовать детали этого в комментарии.Я просто создал следующее:

enum State {
  OK,KS,FL,MA
}

class User {
  Set<State> states = []

  static constraints = {
  }
}

<g:form controller="home" action="save">
    <g:select name="states" multiple="true" from="${com.orm.fun.State.values()}"/>
    <g:submitButton name="save" value="Save"/>
</g:form>

// controller action
def save = { User user ->
    // I didn't do anything here except
    // set a breakpoint for debugging
}

И вот что я получаю:

Debugging in IDEA

Так что я не совсем уверен, что отличается между вами имой, кроме имени enum.Вы видите что-нибудь?

...