Похоже, вы перепутали код на стороне сервера с кодом на стороне клиента.
Код Grails будет оцениваться, когда страница «создается» для отправки в браузер клиента.
Код Javascript будет оцениваться после доставки страницы в браузер.
Имея это в виду, давайте посмотрим на ваше задание onblur:
onblur=${remoteFunction(
action:'dave',
update:'pack'+it.id,
params: [denom: document.getElementById(denomValue+${it.id}).value,
amount: this.value ])}
Учитывая, что вызов $ {remoteFunction ...} является тегом Grails, он будет оцениваться на сервере, генерировать фиксированную строку, а затем отправляться клиенту. Все внутри звонка должно быть правильным Groovy кодом.
Посмотрите на карту параметров, вы добавили Javascript в значение denom, внутри Код Groovy:
document.getElementById(denomValue
затем вы пытаетесь добавить значение из Groovy
+${it.id}
затем немного Javascript снова
).value
Компилятор Groovy попытается оценить Javascript как код Groovy и потерпит неудачу.
Если вам нужен доступ к параметрам на стороне клиента в Javascript, вам нужно самостоятельно обработать Javascript (и не использовать тег remoteFunction), например, для обработки удаленного вызова:
var path=${createLink(action:'dave',
params: [amount:this.value])}
+ "&denom="
+ document.getElementById(denomValue+${it.id}).value
Вам также необходимо самостоятельно обработать удаленный ответ, используя Javascript для обновления элементов pack. Вы всегда можете посмотреть на то, что генерирует вызов remoteFunction, скопировать его на страницу и отредактировать, чтобы сделать то, что вы хотите.
НТН