我目前正在使用 CSS 将我在创建条目时写入的所有内容更改为大写,但这还不够。当我保存内容时,文本字段中显示的文本是大写的,但 Grails 存储的实际值仍然是小写。
我假设我需要更改控制器中的某些内容或任何内容。
也许转换 $fieldValue CSS 可以工作?
任何想法都会有所帮助!
谢谢!
我目前正在使用 CSS 将我在创建条目时写入的所有内容更改为大写,但这还不够。当我保存内容时,文本字段中显示的文本是大写的,但 Grails 存储的实际值仍然是小写。
我假设我需要更改控制器中的某些内容或任何内容。
也许转换 $fieldValue CSS 可以工作?
任何想法都会有所帮助!
谢谢!
您可以为您的域对象编写设置器吗?
class Domain {
String aField
void setAField( String s ){
aField = s?.toUpperCase()
}
}
我想您是在问如何将域对象上的值更改为大写。如果不是这种情况,请澄清问题。
你有很多选择。我会推荐
1)在服务方法中,在保存之前,使用 String.toUpperCase() 修改域对象上的适当值。
或者
2)您可以通过在域对象上定义 beforeInsert 方法并在那里执行 toUpperCase 来使用底层的 Hibernate 拦截器。(参见 grails 文档的 5.5.1)
或者
3)你可以做这个客户端。但是,如果将值存储为上限是“业务要求”,那么我建议在翻译服务器端进行。围绕该代码包装测试更容易......
使用注释是最干净的方法
import org.grails.databinding.BindingFormat
class Person {
@BindingFormat('UPPERCASE')
String someUpperCaseString
@BindingFormat('LOWERCASE')
String someLowerCaseString
}
这是它的链接:Grails doc for data binding
您可以使用 Groovy 元编程来更改所有域类字符串类型属性的设置器,而无需为每个属性实际编写自定义设置器。
为此,请将以下内容添加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)
}
}
}
}