Генерация HTML из чистого блока Scala

Как я могу генерировать HTML из моего чистого блока Scala в представлении Play Framework?

Следующий код поместит текст тегов прямо на страницу, и поскольку вместо '<' scala Put '& lt' теги отображаются не как HTML, а как чистый текст!

Является ли использование переменной в качестве последнего оператора правильным способом возврата значения этой переменной в результате выполнения блока?

@block() = @{
  var str = "<li>"
  str += req.getPage
  var += "</li>"
  str
}

1 ответ

Шаблоны Scala автоматически экранируют весь динамический контент, чтобы защитить вас от атак XSS. Если вы уверены, что контент, который вы размещаете на странице, являются доверенными (т.е. не введены пользователем), и хотите отключить эту защиту XSS (если вы не знакомы с XSS, то будьте очень осторожны здесь, вы Скорее всего, вы привнесете уязвимость в вашу систему, если вы не на 100% понимаете, что делаете), тогда у вас есть два варианта: либо заключить вызов в block в Html когда вы используете это:

@Html(block())

Или оберните возвращаемое значение block в Html:

@block() = @{
  var str = "<li>"
  str += req.getPage
  str += "</li>"
  Html(str)
}

Вы можете прочитать больше об этом в Play-документах, в разделе "Escapeing" внизу этой страницы:

http://www.playframework.com/documentation/2.2.x/ScalaTemplates

Другие вопросы по тегам