Выбор нескольких значений из тега выбора - Grails - PullRequest
3 голосов
/ 12 декабря 2011

Не могли бы вы, пожалуйста, кто-нибудь сказать мне, как получить несколько значений из

<g:select multiple="multiple" ...

У меня есть это в моем create.gsp

<g:select name="validator.id"  multiple="multiple" optionKey="id" from="${com.project.Validator.list()}" value="${validators}" />

, и это в OperationLogContoller.groovy

def create = {
    def operationLogInstance = new OperationLog()
    operationLogInstance.properties = params
    operationLogInstance.validator = Validator.get(params.validatorId)
    operationLogInstance.operation = Operation.get(params.operationId)
    return [operationLogInstance: operationLogInstance]
}


def save = {
    def operationLogInstance = new OperationLog(params)
    println(params.validator)
    operationLogInstance.validator = Validator.get(params.validator.id);
    if (operationLogInstance.save(flush: true))
        flash.message = "${message(code: 'default.created.message', args: [message(code: 'operationLog.label', default: 'OperationLog'), operationLogInstance.id])}"
}

Если я выберу только один из них, он отлично работает, но если я выберу два, я получу следующее исключение:

groovy.lang.MissingMethodException: No signature of method: com.akent.Validator.get() is applicable for argument types: (java.lang.String, java.lang.String) values: [3, 4]
Possible solutions: get(java.lang.Object), getId(), getIp(), getAt(java.lang.String), getAll(), ident()

Ответы [ 2 ]

7 голосов
/ 13 декабря 2011

Ваш MME объясняется тем, что get() в классах домена обрабатывает только один идентификатор за раз.Для нескольких идентификаторов из вашего <select/> используйте.

def validators = Validator.getAll(params.list('validator.id'))

params.list() всегда будет извлекать 'validator.id' в виде списка, даже если он есть только один, что избавит вас от необходимости проверять одинпротив нескольких результатов из вашего <select/>.

1 голос
/ 13 декабря 2011

Согласно этому документу: http://www.grails.org/doc/1.3.7/ref/Tags/select.html Ваш тег выбора неверен, он должен быть скорее:

<g:select name="validator.id"
    multiple="multiple"
    optionKey="id"
    from="${com.project.Validator.list()}"
    value="${contact?.validators*.id}" />
...