2017-06-15 36 views

回答

1

你可以在Twirl中做到這一點,沒有問題。你見過custom format guide嗎?另外,請看play.twirl.api.Formats以瞭解XML是如何實現的。

例如,下面是Play內置的XML Twirl格式的實現。

class Xml private (elements: immutable.Seq[Xml], text: String) extends BufferedContent[Xml](elements, text) { 
    def this(text: String) = this(Nil, Formats.safe(text)) 
    def this(elements: immutable.Seq[Xml]) = this(elements, "") 

    /** 
    * Content type of XML (`application/xml`). 
    */ 
    def contentType = MimeTypes.XML 
} 

/** 
* Helper for XML utility methods. 
*/ 
object Xml { 

    /** 
    * Creates an XML fragment with initial content specified. 
    */ 
    def apply(text: String): Xml = { 
    new Xml(text) 
    } 

} 

/** 
* Formatter for XML content. 
*/ 
object XmlFormat extends Format[Xml] { 

    /** 
    * Creates an XML fragment. 
    */ 
    def raw(text: String) = Xml(text) 

    /** 
    * Creates an escaped XML fragment. 
    */ 
    def escape(text: String) = Xml(StringEscapeUtils.escapeXml11(text)) 

    /** 
    * Generate an empty XML fragment 
    */ 
    val empty: Xml = new Xml("") 

    /** 
    * Create an XML Fragment that holds other fragments. 
    */ 
    def fill(elements: immutable.Seq[Xml]): Xml = new Xml(elements) 
} 

因爲你可以在Twirl中做到這一點,所以你可以使用現有的Deadbolt模板。如果您選擇使用非Twirl實現,則可以重新實現您需要的Deadbolt模板,因爲所有邏輯實際上都是在模板之外處理的。看看be.objectify.deadbolt.java.ViewSupportbe.objectify.deadbolt.scala.ViewSupport - 例如,dynamic模板只接受一些參數並將它們直接傳遞給ViewSupport

@if(viewSupport.dynamic(name, meta, handler, timeout(), request)) { 
    @body 
} 
+0

感謝您的快速響應。將嘗試按照您的建議實施。 –