Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Безопасный вывод в jstl


Автор: jecl 30.3.2009, 16:53
Всем привет!
Часто сталкивался с проблемой вывода стрингов содержащих спец символы. В скриплетах просто использовал свой клас который экранировал ' и ", а также прочие символы на нужные, что бы хтмл и жаваскрипт не ломался. На данном этапе проект переходит от скриплетов к jstl, вопрос:
 есть ли какие-то стандартые решения описанной проблемы?
Да, в functions есть replace() но вызывать его для каждого символа не удобно.
Единственный вывод, кот я вижу сейчас, - писать свой тег, в котором использовать тот же StringEscapeUtill

Ну и пару вопросов для рассуждения.
В любом случае в бекенде(БД) мы храним чистую инфу, никакого экрана там нет, экран нужен при выводе этой инфы. Стоит ли его делать на уровне вывода(вью), с помощью тех же тегов либо же на уровне получения данных, при билде коллейций, в сервлет-контроллере скажем?
Вроде тривиальная задача, а очевидных элегантных решений не вижу, подскажите плз.

Да, еще такой вопрос, я так понимаю, используя какие-либо рич гуи фреймворки(gwt) проблема отпадает, не будет же ломаться компонент из-за того что в данных есть спец символы..?
Если так, интерестно какой подход там использован для безопасного вывода.

Спасибо!

Автор: vicod 30.3.2009, 17:26
так
Код

<c:out value="${myString}"/>

или так
Код

<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
${fn:escapeXml(myString)}

оно?

Автор: jecl 30.3.2009, 18:23
Код

{fn:escapeXml(myString)}
$
Похоже на правду, но с одинарной кавычкой не пашет
исходник jsp
Код

<a onclick="return(confirm('Really remove   ${fn:escapeXml(requestScope.roleName)}?'))" href=

исходник полученной хтмл
<a onclick="return(confirm('Really remove Test'role ?'))" 

Ошибка
Error: missing ) after argument list
Line: 1, Column: 36
Source Code:
return(confirm('Really remove   Test'role ?'))

Вообще одинарная кавычка экранируется слешом \'

Сенк за тык пальцем, но все же что с один кавычкой делать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)