Я понимаю, что вы уже нашли обходной путь к этому, но меня беспокоило, что ваш код не работал так же, как мой, поэтому я решил немного продолжить расследование на случай, если кто-нибудь еще столкнется с этой проблемой.
Как уже упоминали другие люди, params.anything
обычно возвращает строковое значение. Это связано с тем, что параметры обычно кодируются как параметры URI (например,? Progress = false), а не автоматически помещаются в другие типы. (Это вполне разумно; у Grails не было бы хорошего способа узнать, каким типом они должны быть.) Однако возможно (и иногда разумно) визуализировать ваш вид или шаблон из контроллера, такого как render view: whatever, model: [your: model, params: params]
, где вы специально включаете параметры в модели. (Возможно, у вас есть много параметров, которые вам не нужно индивидуально воссоздавать в модели.) В этом случае карта параметров будет существовать как параметры URI (? Progress = false) и запись модели в области страницы (params: [ progress: Boolean.FALSE]). Область страницы имеет приоритет над параметрами URI, поэтому ваши типы будут сохранены.
В моем тестировании я добавил ваш код на существующую страницу, где я уже передавал параметры в модель, поэтому тип был сохранен и для вновь добавленного параметра. (Обратите внимание, что как только параметры попадают в область видимости страницы, они также доступны для включенных шаблонов или представлений.) Следовательно, я видел тип логического прогресса, тогда как в базовом примере это был бы тип String.
TL / DR: либо предполагайте, что параметры являются строками, либо явно включайте параметры в вашу модель области страницы при рендеринге.