3

如何在控制器中动态获取 el 表达式的值。对于等式。

class ElController {
  def index() = {
    def a = "\${1 + 3}"
    unknownElEvaluator(a) // ->"2"
    ....
  }
}
4

1 回答 1

3

您可以使用 Groovy SimpleTemplateEngine 做到这一点:

import groovy.text.SimpleTemplateEngine

def binding = [:]
def a = "\${1 + 3}"
String rslt = new SimpleTemplateEngine().createTemplate( a )
                                        .make( binding )
                                        .toString()
assert rslt == '4' // 4 not 2 as in your question

尽管知道为什么要在控制器中执行此操作会很有趣...

或者,您应该能够添加:

def groovyPagesTemplateEngine

到您的控制器(或者最好作为单独的服务类,因为您最终可能希望从代码中的多个位置执行此操作)

然后,从方法内部,执行:

def binding = [:]
def a = "\${1 + 3}"

String rslt = new StringWriter().with { writer ->
  groovyPagesTemplateEngine.createTemplate( a, 'myscript' )
                           .make( binding )
                           .writeTo( writer )
  writer.toString()
}
于 2012-07-09T11:47:12.100 回答