9

我目前正在使用 CSS 将我在创建条目时写入的所有内容更改为大写,但这还不够。当我保存内容时,文本字段中显示的文本是大写的,但 Grails 存储的实际值仍然是小写。

我假设我需要更改控制器中的某些内容或任何内容。

也许转换 $fieldValue CSS 可以工作?

任何想法都会有所帮助!

谢谢!

4

4 回答 4

21

您可以为您的域对象编写设置器吗?

class Domain {
 String aField

 void setAField( String s ){
   aField = s?.toUpperCase()
 }
}
于 2010-10-25T15:13:32.050 回答
4

我想您是在问如何将域对象上的值更改为大写。如果不是这种情况,请澄清问题。

你有很多选择。我会推荐

1)在服务方法中,在保存之前,使用 String.toUpperCase() 修改域对象上的适当值。

或者

2)您可以通过在域对象上定义 beforeInsert 方法并在那里执行 toUpperCase 来使用底层的 Hibernate 拦截器。(参见 grails 文档的 5.5.1)

或者

3)你可以做这个客户端。但是,如果将值存储为上限是“业务要求”,那么我建议在翻译服务器端进行。围绕该代码包装测试更容易......

于 2010-10-25T15:10:04.777 回答
3

使用注释是最干净的方法

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

    @BindingFormat('LOWERCASE')
    String someLowerCaseString
}

这是它的链接:Grails doc for data binding

于 2015-02-19T05:27:24.043 回答
1

您可以使用 Groovy 元编程来更改所有域类字符串类型属性的设置器,而无需为每个属性实际编写自定义设置器。

为此,请将以下内容添加initBootstrap.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)
            }
         }
      }
   }
于 2010-10-25T16:13:35.323 回答