您遇到的错误是因为 remoteFeild 不接受 params 作为其参数,并且当您使用关键字 params 时,它会混淆代码(查看 remotefield 源代码)。如果您需要传递一个参数,我建议将它们放入 Id 并将其传递给您的控制器。
例如:
<g:remoteField action="getReportsToResults" update="reportsToResultsDiv" paramName="search" params="[company:contactInstance.company]" name="reportsToResults" value="" id = "123"/>
RemoteField 参数为:
name (必填) - 字段的名称
value (可选) - 字段的初始值
paramName (可选) - 发送到服务器的参数名称
action (可选) - 链接中使用的动作名称,如果没有指定默认动作将被链接
controller (optional) - 在链接中使用的控制器的名字,如果没有指定当前控制器将被链接
id (可选) - 链接中使用的 id
update(可选)- 包含要为“成功”或“失败”状态更新的元素的映射,或者包含要更新的元素的字符串,其中原因失败事件将被忽略
before(可选)- 在远程函数调用之前调用的 javascript 函数
after(可选)- 在远程函数调用之后调用的 javascript 函数
asynchronous (optional) - 是否异步调用(默认为true)
method (optional) - 使用执行调用的方法(默认为“post”)
来自 1.3.7 的源代码
def remoteField = { attrs, body ->
def paramName = attrs.paramName ? attrs.remove('paramName') : 'value'
def value = attrs.remove('value')
if (!value) value = ''
out << "<input type=\"text\" name=\"${attrs.remove('name')}\" value=\"${value}\" onkeyup=\""
if (attrs.params) {
if (attrs.params instanceof Map) {
attrs.params[paramName] = new JavascriptValue('this.value')
}
else {
attrs.params += "+'${paramName}='+this.value"
}
}
else {
attrs.params = "'${paramName}='+this.value"
}
out << remoteFunction(attrs)
attrs.remove('params')
out << "\""
attrs.remove('url')
attrs.each { k,v->
out << " $k=\"$v\""
}
out <<" />"
}