簡體   English   中英

來自字符串的MarkupBuilder渲染

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM