Целочисленная проверка - без повторного отображения ввода пользователя - PullRequest
1 голос
/ 27 февраля 2012

У меня есть класс домена:

class Test {
    Integer blah
}

и контроллер scafollded и представления.Заполнение blah в форме с недопустимым Integer (1a или ab) не проходит проверку, но не заполняет текстовое поле неверным пользовательским вводом.

Мне кажется, я понимаю, почемуэто происходит (blah экземпляра домена, переданного обратно в gsp для рендеринга, не может содержать буквенные символы, потому что это Integer), но есть ли хороший способ повторно заполнить форму с неверным вводом?

Существует несколько решений: иметь переходный процесс String blah с валидатором регулярных выражений, обеспечивающий ввод числовых значений, а затем переопределить метод получения Integer blah, чтобы получить значение String blah.Затем укажите String blah в форме.В качестве альтернативы предоставьте всем браузерам, совместимым с HTML5, где type=number работает:)

Есть ли лучшие способы решения этой проблемы?

Ответы [ 3 ]

3 голосов
/ 27 февраля 2012

Если при создании или сохранении объекта домена произошла ошибка, не могли бы вы вернуть объект params в представление и повторно заполнить входные данные этого объекта, если он существует?

0 голосов
/ 28 февраля 2012

Тег fieldValue предназначен для этого случая использования:

Проверяет компонент, который был объектом привязки данных, и получает значение поля либо из первоначально переданного значения в объекте ошибок компонента, заполненного во время привязки данных, либо из значения свойства компонента. Как только значение будет получено, оно будет автоматически закодировано в HTML.

Например:

<g:textField name="blah" value="${fieldValue(bean: testInstance, field: 'blah'}"/>
0 голосов
/ 27 февраля 2012

Мне кажется, я понимаю, почему это происходит (бла экземпляра домена, переданного обратно в gsp для рендеринга, не может содержать буквенные символы, потому что это целое число),

Правильно, обычно повторяетсяформа работает следующим образом:

  class MyController {
    def showForm() {
      [bean: new Test()]
    }

    def processForm(Test bean) {
      if (!bean.validate()) {
        render view: 'showForm', model: [bean: bean] 
      } else {
        // save the bean or whatever....
      }
    }
  }

И поля формы в showForm.gsp устанавливаются с использованием:

<g:textField name="blah" value="${bean.blah}"/>

Поскольку bean нельзя вернуть в форму, содержащую значениянеправильный тип, эти значения будут «потеряны», если вы используете разметку выше.Тем не менее, эти значения все еще должны быть доступны в объекте params, поэтому я думаю, что следующее должно работать (хотя не проверял его)

<g:textField name="blah" value="${bean.blah ?: params.blah}"/>

Можно определить один шаблон, который определяет логикуи стиль для каждого поля - вместо того, чтобы повторять его для каждого поля - используя новый плагин fields .

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