Grails: Как сделать все, что я создаю Upper Case? - PullRequest
9 голосов
/ 25 октября 2010

В настоящее время я использую CSS для изменения всего, что я пишу в upperCase при создании записи, но этого недостаточно.Когда я сохраняю вещи, текст, отображаемый в текстовых полях, пишется в верхнем регистре, но реальное значение, которое хранит Grails, остается в нижнем регистре.

Я предполагаю, что мне нужно что-то изменить в контроллере или что-то еще.

Может быть, преобразование CSS $ fieldValue может сработать ??

Любые идеи помогут!

Спасибо!

Ответы [ 4 ]

19 голосов
/ 25 октября 2010

Вы могли бы просто написать сеттеры для вашего доменного объекта?

class Domain {
 String aField

 void setAField( String s ){
   aField = s?.toUpperCase()
 }
}
4 голосов
/ 25 октября 2010

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

У вас есть несколько вариантов. Я бы порекомендовал

1) В методе службы перед сохранением используйте String.toUpperCase () для изменения соответствующих значений в доменном объекте.

или

2) Вы можете использовать базовые перехватчики Hibernate, определив метод beforeInsert для вашего доменного объекта и сделав там toUpperCase. (см. 5.5.1 документации Grails)

или

3) Вы можете сделать это на стороне клиента. Однако, если это «бизнес-требование», чтобы значения хранились как верхние, то я рекомендую использовать сторону сервера перевода. Проще обернуть тесты вокруг этого кода ....

2 голосов
/ 19 февраля 2015

Использование аннотаций - самый чистый подход

import org.grails.databinding.BindingFormat
class Person {
    @BindingFormat('UPPERCASE')
    String someUpperCaseString

    @BindingFormat('LOWERCASE')
    String someLowerCaseString
}

Вот ссылка на него: Документ Grails для привязки данных

1 голос
/ 25 октября 2010

Вы можете использовать метапрограммирование Groovy, чтобы изменить установщик для всех свойств класса String с типом строки без фактической записи пользовательского установщика для каждого свойства.

Чтобы сделать это, добавьте что-то вроде следующего в initзакрытие Bootstrap.groovy

   def init = { servletContext ->

      for (dc in grailsApplication.domainClasses) {        

         dc.class.metaClass.setProperty = { String name, value ->

            def metaProperty = delegate.class.metaClass.getMetaProperty(name)

            if (metaProperty) {

               // change the property value to uppercase if it's a String property
               if (value && metaProperty.type == String) {
                  value = value.toUpperCase()
               }

               metaProperty.setProperty(delegate, value)
            } else {
               throw new MissingPropertyException(name, delegate.class)
            }
         }
      }
   }
...