Scala / Java-сервлеты: как выводить <в HTML-код вместо < - PullRequest
3 голосов
/ 05 августа 2010

У меня есть сервлет, закодированный в Scala. У меня там есть такой код:

def message = <HTML><HEAD><TITLE>Test</TITLE></HEAD><BODY>{value}</BODY></HTML>
def value = "Hello <BR/> World"

Соответствующий HTML-код, сгенерированный для value, равен

Hello &lt;BR/&gt; World

Как мне получить его для генерации HTML-кода (показан ниже)?

Hello <BR/> World

Заранее спасибо

1 Ответ

7 голосов
/ 05 августа 2010

Если вы не возражаете против изменения типа value на xml.Elem, вы можете сделать

def value = <xml:group>Hello <BR/> World</xml:group>

Добавление

На мой взгляд,Вы должны набрать как можно больше встроенных XML.Только тогда у вас будет проверка времени компиляции ввода.Все остальные решения в какой-то момент дают вам исключение времени выполнения (скажем, вы забыли /) или даже могут нарушить макет XML.

Однако, если вы действительно хотите иметь простое преобразование, вы можетесделайте это:

class XmlString(str: String) {
  def assumeXML = xml.XML.loadString("<xml:group>" + str + "</xml:group>")
  def toUnparsedXML = new xml.Unparsed(str)
}
implicit def stringToXmlString(str: String) = new XmlString(str)

def value = "Hello <BR/> World"

и затем (по какой-то причине он по-прежнему показывает часть <xml:group>; вы можете избавиться от нее с помощью xml.NodeSeq.fromSeq(value.assumeXML.child) или аналогичной)

def message = <HTML><HEAD><TITLE>Test</TITLE></HEAD><BODY>{value.assumeXML}</BODY></HTML>

или даже (ну, вам здесь не нужно неявное, Unparsed(value) подойдет)

def message = <HTML><HEAD><TITLE>Test</TITLE></HEAD><BODY>{value.toUnparsedXML}</BODY></HTML>

Метод assumeXML завершится с ошибкой во время выполнения, если вы предоставите неверный XML;toUnparsedXML примет все входные данные, даже данные, которые потенциально опасны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...