2012-07-09 108 views
3

如何在控制器中動態獲取el表達式的值。對於等式動態評估el表達式

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

回答

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 

向您的控制器(或最好是單獨的Servi CE類,你可能最終想要在你的代碼要做到這一點從多個地方)

然後,從方法內,這樣做:

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

String rslt = new StringWriter().with { writer -> 
    groovyPagesTemplateEngine.createTemplate(a, 'myscript') 
          .make(binding) 
          .writeTo(writer) 
    writer.toString() 
} 
+0

感謝。我想將消息翻譯成js和map * .js文件到將使用您的代碼示例的控制器。在這一刻我沒有看到任何其他解決方案。 – DraganS 2012-07-09 12:01:23

+0

如果我把def a =「\ $ {g.message(code:'this.time.next.year.we.ll.be.millionaires')}」例外。是否需要空綁定? – DraganS 2012-07-09 12:28:50

+0

@DraganS是的,嘗試第二種方法...它似乎爲我工作... – 2012-07-09 12:44:03