Вопрос

Я новичок в 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. Вам следует сообщить об этой проблеме.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top