Ссылка на карту Groovy с помощью переменной внутри выражения GSP - PullRequest
0 голосов
/ 30 апреля 2011

Я пытаюсь уменьшить количество повторяющегося кода GSP в моем приложении Grails. Следующий код работает как положено:

<g:textField name="recordValues.0.name" value="${recordValues?.get(0)?.name}"/>
<g:textField name="recordValues.0.age" value="${recordValues?.get(0)?.age}"/>

[править] recordValues.0.age на самом деле является картой, а не свойством класса, как я говорил ранее.

Однако, когда я пытаюсь динамически установить набор из них с перечислением list , атрибут value не оценивается:

<g:each in="${fields}" var="prop">
  <g:textField name="recordValues.0.${prop}" value="${recordValues?.get(0)?.prop}"/>
</g:each>

Похоже, что атрибут значения ищет свойство Ключ карты с именем "prop" и не оценивает его как переменную. Я пробовал recordValues?.get(0)[prop] с ? и без него, но он не компилировался.

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

1 Ответ

1 голос
/ 01 мая 2011

Сортировал сам в конце. Спасибо кодовому пространству за то, что я снова проверил код и заметил, что это карта, на которую я пытался ссылаться, а не свойство объекта. Тот факт, что я использовал enum, запутал проблему, так как использование обычного map.get(var) не сработало, вместо этого мне потребовалось map.get(var.name()) (возможно, я буду кодировать его как поле String внутри перечисления, чтобы избежать этого).

Вот решение:

<g:each in="${fields}" var="prop">
  <g:textField name="recordValues.0.${prop}" value="${recordValues?.get(0)?.get(prop.name())}"/>
</g:each>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...