我正在使用MarkupBuilder从标记库中呈现一些超文本标记语言,如下所示(为清晰起见进行了简化):
def formContainer = new MarkupBuilder(out)
formConainer.form() {
input() { }
input() { }
}现在假设在form()中的某个地方,我想拉入一些由用户指定的元素,因此在文件系统的文件中,我有如下所示(同样,简化)……
select() {
option()
option()
}我的问题是,如果我将select作为字符串读取,那么标记库是否可以将其解析为groovy并使其成为MarkupBuilder实例的一部分?
def formContainer = new MarkupBuilder(out)
formConainer.form() {
input() { }
input() { }
// I want the select to render here
}发布于 2011-10-12 16:59:15
执行此操作的一种方法是:
String externalMarkup = '''
select() {
option()
option()
}
'''
def out = new StringWriter()
def formContainer = new groovy.xml.MarkupBuilder( out )
formContainer.form() {
input()
input()
// Wrap the string in { -> ... } to make it a closure, and evaluate it
def extern = new GroovyShell().evaluate( "{ it-> ${externalMarkup} }" )
// Set the delegate of this closure to the MarkupWriter
extern.delegate = formContainer
// Then execute the closure
extern()
}
println out.toString()然而,对我来说这感觉很脆弱...
一种更好的方法可能是使用GroovyTemplateEngine将您的值注入到格式化的完整标记中
https://stackoverflow.com/questions/7735420
复制相似问题