从select标签中选择多个值 - Grails

sup*_*upp 3 grails groovy springsource

你能不能请任何人告诉我如何获得多个价值观

<g:select multiple="multiple" ...
Run Code Online (Sandbox Code Playgroud)

我在create.gsp中有这个

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

这是在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])}"
}
Run Code Online (Sandbox Code Playgroud)

如果我从select中选择一个,它可以正常工作,但如果我选择两个,我会得到以下异常:

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()
Run Code Online (Sandbox Code Playgroud)

sch*_*159 7

MME的原因是get()on Domain类一次只处理一个id.适用于您<select/>使用的多个ID .

def validators = Validator.getAll(params.list('validator.id'))
Run Code Online (Sandbox Code Playgroud)

params.list()会始终取"validator.id"作为一个列表,即使只有一个,这将节省您不必测试单VS从多个结果<select/>.