grails - 使用域类绑定(bind)在运行时评估 GString

标签 grails groovy

我想存储一个用户可配置的 GString ,该 GString 将绑定(bind)到一个域类,但我在找到一个很好的解决方案时遇到了问题。

示例( 概念/伪/非工作 )

class Person{
    ...

    String displayFooAs;  //<-- contains a java.lang.String like '${name} - ${address}'
}


class Foo{

    String name;
    String address;
    String city;

    public String getDisplayAs(def person){

        return doStuff(this, person.displayFooAs); //<-- Looking for something simple.

    }



}

更新:

经过审查,我决定这种灵 active 将构成 安全风险 .它将允许用户基本上将 sql 注入(inject)脚本写入“dispalyFooAs”。回到绘图板。

最佳答案

你的意思是像:

public String getDisplayAs(def person){
  doStuff( this, person?.displayFooAs ?: "$name - $address" )
}

这在 Groovy 中有效,但我从未在 Grails 中将 SimpleTemplateEngine 嵌入到类似的东西中,因此需要进行大量测试以确保它按预期工作并且不会占用内存。
import groovy.text.SimpleTemplateEngine

class Person {
  String displayAs = 'Person $name'
}

class Foo {
  String name = 'tim'
  String address = 'yates'

  String getDisplayAs( Person person ) {
    new SimpleTemplateEngine()
          .createTemplate( person?.displayAs ?: '$name - $address' )
          .make( this.properties )
          .toString()
  }
}

def foo = new Foo()

assert foo.getDisplayAs( null )         == 'tim - yates'
assert foo.getDisplayAs( new Person() ) == 'Person tim'

关于grails - 使用域类绑定(bind)在运行时评估 GString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13123354/

相关文章:

grails - Grails的failOnError是否会强制刷新?

grails - linode.com vs slicehost.com:哪个更适合Java应用程序?

hibernate - 使用Hibernate将可变转换为不可变

java - 通过 GSP 和 Groovy 代码在表单或文本区域、textForm 中显示文本值

java - Grails在合成方面如何使用GORM(对HasMany或不对)

java - groovy spock 测试无法在同一包中找到 java 类

grails - GSP-选择标签。如何实现选定的=“selected”

grails - 我们如何使用Grails域或GORM截断表?

hibernate - Grails 2.3.11-对象无法持久

grails - 强制Grails升级插件使用的库的正确方法