[英]MarkupBuilder Rendering From String
我正在使用MarkupBuilder從taglib渲染一些HTML,如下所示(為了清晰起見,將其刪除):
def formContainer = new MarkupBuilder(out)
formConainer.form() {
input() { }
input() { }
}
現在假設在form()內的某個地方,我想插入用戶指定的某些元素,因此在文件系統上的文件中,我有類似的內容(再次簡化)。
select() {
option()
option()
}
我的問題是,如果我讀到select in in a String,taglib是否有一種方法可以將其解析為Groovy並將其作為MarkupBuilder實例的一部分?
def formContainer = new MarkupBuilder(out)
formConainer.form() {
input() { }
input() { }
// I want the select to render here
}
一種這樣做的方法是:
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將值注入格式化的完整標記中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.