Дубликаты сообщений об ошибках Grails
-
05-07-2019 - |
Вопрос
Я новичок в Grails и у меня проблема:
У меня есть этот фрагмент GSP:
<g:form url="[controller:'main',action:'login']">
<label for="name">Usuario:</label><br/>
<input type="text" name="name" /><br/>
<label for="pass">Password:</label><br/>
<input type="password" name="password"/><br/>
<input type="submit" value="Login"/><br/>
<g:renderErrors bean="${cmd}"/>
</g:form>
Контроллер (MainController.groovy) использует объект Command, вот код для обоих:
def login = { LoginCommand cmd ->
if(cmd.validate()){
redirect(action:'ok')
}else{
render(view:'index',model:[cmd:cmd])
}
}
class LoginCommand {
String name
String password
static constraints = {
name(blank:false,size:5..10)
password(blank:false,size:5..10)
}
}
Проблема в том, что когда я ввожу неверное имя или пароль (пусто или за пределами диапазона), показывает 4 ошибки: две для пароля и две для имени пользователя . Они одинаковые, но продублированные.
Я обнаружил, что создание метода " bool validateCommand () {name & amp; & amp; пароль} " и замена его на command.validate () не выбрасывает дубликаты, но я хочу использовать функции ограничений Grails, чтобы сохранить вещи СУХИМЫМИ. Р>
Есть идеи, почему это происходит? Большое спасибо!
Решение
Когда вы вводите объекты команд в действия контроллера, Grails автоматически выполняет validate ()
, поэтому нет необходимости вызывать его вручную. Попробуйте
if(!cmd.hasErrors())
вместо
if(cmd.validate())
Кажется, что каждый вызов validate ()
добавляет новые (повторяющиеся) ошибки к объекту команды. ИМХО этого не должно произойти, и, вероятно, это ошибка в Grails. Вам следует сообщить об этой проблеме.