Начиная с версии Grails 2.3 все выражения $ {} автоматически выводятся на GSP. Это очень полезно, потому что пользовательский ввод теперь экранируется, и любой HTML или JavaScript во входном значении экранируется и не интерпретируется браузером как HTML или JavaScript. Это сделано для того, чтобы наше приложение Grails было защищено от атак межсайтового скриптинга (XSS).
Но иногда мы хотим выводить неэкранированный HTML-контент в веб-браузер. Например, мы сами генерируем значение и знаем, что оно безопасно и его нельзя использовать для атак XSS. В Grails 2.3 мы можем использовать новый метод raw() в наших GSP, библиотеках тегов или контроллерах. Метод оставит содержимое без изменений и вернет неэкранированное значение для отображения. В качестве альтернативы мы можем использовать encodeAsRaw() для содержимого, которое мы хотим оставить без экранирования. Наконец, тег encodeAs принимает значения Raw или None качестве значений для codec атрибута и возвращает неэкранированное значение.
В следующем примере GSP мы отображаем значение свойства модели content переданного на страницу. Значение устанавливается контроллером и является <em>sample</em> content .
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
... <h2>Raw output samples</h2> <table> <tr><th>Expression</th><th>Result</th></tr> <tr> <td>${'${content}'}</td> <td>${content}</td> </tr> <tr> <td>${'${raw(content)}'}</td> <td>${raw(content)}</td></tr> <tr> <td>${'${content.encodeAsRaw()}'}</td> <td>${content.encodeAsRaw()}</td> </tr> <tr> <td>${'<g:encodeAs codec="Raw">${content}</g:encodeAs>'}</td> <td><g:encodeAs codec="Raw">${content}</g:encodeAs></td> </tr> <tr> <td>${'<g:encodeAs codec="None">${content}</g:encodeAs>'}</td> <td><g:encodeAs codec="None">${content}</g:encodeAs></td> </tr> </table>... |
В нашем веб-браузере мы видим следующий вывод:
