动态评估el表达式

时间:2012-07-09 11:39:44

标签: grails groovy

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

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

1 个答案:

答案 0 :(得分: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()
}