2011-12-12 51 views
3

可以请任何人告诉我如何从选择从选择标签的多个值 - Grails的

<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])}" 
} 

如果我从select中选择一个,它可以很好地工作,但如果我选择两个,我会得到fo llowing例外:

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() 
+1

你需要验证是一个一对多的关系,以支持单OperationLog保存多个验证。 – ataylor

+0

感谢你快速回复@ataylor,但他们已经在完全相同的关系 ** Validator.groovy:** '静态的hasMany = [operationlog:OperationLog]' ** OperationLog.groovy:** '静belongsTo = [Validator]' – supp

回答

7

MME是因为域类的get()一次只能处理一个ID。对于您的<select/>使用多个ID。

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

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

+0

'def operationLogInstance = new OperationLog(params)' **我必须删除这行中的params。谢谢@ schmolly159 ** – supp

1

根据这个文档: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}" />