Метод Grails hasErrors с тернарным оператором? - PullRequest
1 голос
/ 31 октября 2011

Я занимаюсь разработкой приложения с использованием инфраструктуры Grails, и у меня возникают проблемы с hasErrors при вызове в качестве метода из представления gsp.

У меня есть форма, которая заполняется значениями из базы данных (значения по умолчанию). Эти значения хранятся в объекте сеанса. Пользователи могут редактировать значения в полях формы и отправлять результаты обратно в базу данных. Перед сохранением данных у меня есть объект команды, который проверяет данные. При наличии ошибок объекты команды отображают вид с той же формой и подсвечиваются ошибки.

Я пытаюсь заполнить поля формы значениями, хранящимися в объекте сеанса, если нет ошибок в объекте команды. В этом случае поля должны быть заполнены неправильными значениями, введенными пользователем.

Вот фрагмент кода:

<g:textField name="somename" id="someid" value="${hasErrors(bean: commandobject, field: 'somename') ? fieldValue(bean: commandobject, field: 'somename') : session.somevalue}" />

Проблема с приведенным выше кодом заключается в том, что независимо от значения, введенного в поле, будь то правильное или неправильное, поле всегда заканчивается значением из объекта сеанса. Есть ли решение этого или я делаю что-то не так?

Ответы [ 2 ]

3 голосов
/ 31 октября 2011

Когда вы вызываете hasErrors таким образом, вы вызываете тег <g:hasErrors/>, который не возвращает логическое значение - он смотрит на условие и условно вызывает тело тега . Под этим описанием имеет смысл, почему он ведет себя так, как он есть.

Я бы порекомендовал создать свой собственный TagLib и использовать commandobject.errors.hasFieldErrors('somename') [документы] в вашем состоянии (чтобы получить логическое значение, которое вы ищете ).

2 голосов
/ 09 января 2013

hasErrors как вызов метода в GSP работает немного иначе, чем тег <g:hasErrors>. Первый предназначен для установки класса CSS в div или span и т. Д.

e.g. <div class="prop ${hasErrors(bean:parent, field:'child.name', 'errors')}">

где errors - имя класса CSS. Поэтому, если вы не укажете выходную строку, она, по-видимому, вернет false по умолчанию, поэтому для обхода вашего случая верните '1'. Итак, ваш код должен выглядеть так:

<g:textField name="somename" id="someid" value="${hasErrors(bean: commandobject, field: 'somename', '1') ? fieldValue(bean: commandobject, field: 'somename') : session.somevalue}" />

Это также будет работать с логическими операциями в <g:if>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...