Дубликаты сообщений об ошибках Grails - PullRequest
1 голос
/ 06 мая 2009

Я новичок в 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 && password}" и замена его на command.validate () не создает дубликаты, но я хочу использовать функции ограничений Grails для сохранения СУШКИ.

Есть идеи, почему это происходит? Большое спасибо!

1 Ответ

8 голосов
/ 06 мая 2009

Когда вы вводите объекты команд в действия контроллера, Grails автоматически выполняет validate(), поэтому нет необходимости вызывать его вручную. Попробуйте

if(!cmd.hasErrors())

вместо

if(cmd.validate())

Кажется, что каждый вызов validate() добавляет новые (повторяющиеся) ошибки к объекту команды. ИМХО этого не должно произойти, и, вероятно, это ошибка в Grails. Вы должны рассмотреть вопрос об этом .

...