Где найти подходящее место для кавычек в Play Framework?

У меня есть следующий поток:

A user is presented with a form. He fills in the form fields, and submits to the controller, which persists this to the DB On another page, the Controller gets this record from the DB, and passes it to the view The view captures it as a javascript variable: var foo = '${user.bar}';

Теперь, если пользователь вводит эту строку в виде:

I have a quote - ' - very dangerous

затем цитата проходит через всю базу данных и обратно, и в результатеcorrupt заявление javascript:

var foo = 'I have a quote - ' - very dangerous';

Как лучше всего избежать этого персонажа и как? Я не хочу делать это вручную для каждого использования шаблона, это утомительно и подвержено ошибкам.

 ripper23407 июн. 2012 г., 11:00
Я только что нашел модуль расширений Java. Это действительно лучшее, что мы можем сделать - использовать это${user.bar.addSlashes().raw()}? Это довольно многословно и подвержено ошибкам.playframework.org/documentation/1.2.4/javaextensions
 Gelin Luo07 июн. 2012 г., 12:48
Если вы используете шаблонизатор Rythm, это может бытьvar foo = '@user.bar.escapeJavaScript()'; , Проверьтеplayframework.org/modules/rythm для больше о шаблонном движке Rythm

Ответы на вопрос(1)

Решение Вопроса

он содержит цитату и должен храниться таким образом в базе данных. Вы должны избегать кавычек при использовании этой строки в строковом литерале JavaScript.

Вы можете использовать Apache Commons-LangStringEscapeUtils.escapeECMAScript() метод, чтобы сделать это, или вы можете закодировать ваши объекты Java в строки JSON и проанализировать строку JSON в вашем коде JavaScript.

 ripper23407 июн. 2012 г., 11:02
Разве этот подход не является многословным и подвержен ошибкам? Это лучшее, что у нас есть сейчас?
 ripper23407 июн. 2012 г., 11:11
Когда я генерирую HTML, Play обрабатывает экранирование для меня, нет? Возможно, я надеюсь, что еще один оператор игры сократит многословие ...$$user.foo$$, Я думаю, что это, вероятно, не существует сейчас, даже в стороннем модуле. Я приму ваш ответ на данный момент.
 07 июн. 2012 г., 11:09
На что именно вы надеетесь? Волшебный инструмент, который будет знать, что вы генерируете буквенную строку JS, и который волшебным образом спасет вас от чего-либо? Когда вы генерируете HTML, вы должны html-экранировать свои строки. Когда вы генерируете строки JS, вы должны JS-экранировать свои строки.
 ripper23407 июн. 2012 г., 11:39
По умолчанию он выполняет экранирование HTML:stackoverflow.com/questions/5764679/…
 ripper23407 июн. 2012 г., 11:06
Кстати, см. Также мой комментарий выше о модуле расширений Java.

Ваш ответ на вопрос