片段不解释html标签

时间:2013-07-22 18:20:24

标签: scala lift

我需要的是在一个片段中显示列表的内容。

我有这样的功能:

  def generateHtml(data: List[Documents]): NodeSeq = {
    val html = <ul><li></li></ul>
    def  css = "li" #> data.map {
      document =>
        "* *" #>  ( document.title + ": " + document.content )
    }
    css(html)
  }

列表值包含这样的html代码:

val data: List[Document] = List(Document("<b>title</b> 1", "content 1"),Document("`<b>title</b> 2", "content 2") )

效果很好,因为它显示了列表值,但问题是它不解释html代码(标签<b>

在我的代码片段中,它显示了类似这样的内容:

<b>title</b> 1: content 1
<b>title</b> 2: content 2

但我需要的是解释tas b

类似的东西:

标题 1:内容1

标题2 :内容2

我可以做任何解释标签的建议

我在这里发现了类似的问题: Scala: Parse HTML-fragment

使用解决方案进行探测,但不起作用

2 个答案:

答案 0 :(得分:1)

这是因为Stringscala.xml.Text之间存在转换,默认情况下会转义字符。如果您将字符串包装在scala.xml.Unparsed中,它应该按照您的要求进行操作:

def generateHtml(data: List[Documents]): NodeSeq = {
  val html = <ul><li></li></ul>
  def  css = "li" #> data.map {
    document =>
      "* *" #>  scala.xml.Unparsed( document.title + ": " + document.content )
  }
  css(html)
}

请注意,使用不受信任的内容并不是一个好主意,即:用户可能输入的内容。在这些情况下,你最好使用像Markdown或Textile这样的东西。

答案 1 :(得分:0)

添加到jcern所说的内容,你最好保留没有<b></b>的标题。在渲染时,您可以编写

"li" #> data.map(doc => <li><b>{doc.title}</b>: {dot.content}</li> )

alternatevly,甚至更好,你可以像这样使用“CSS转换”:

val html = <ul><li> <b class="title">t</b>: <span class="content">c</span> </li></ul>
// (in real-world render method, the html: NodeSeq is taken as a method parameter)

val transformation = "ul *" #> data.map{ doc =>
    ".title *" #> doc.title & 
        ".content" #> doc.content
}

transformation(css)