Могу ли я использовать визуальный контекст дисплея вместе с меткой i18n?
Я вижу код в моем проекте как
${'myproj.label' @i18n, format=[sighltyObj.field1], context='text'}
Намерение - передать переменную в текст i18n + кодировать тексты безопасно. Правильно ли использовать контекст дисплея вместе с переводами i18n? Когда я тестировал с field1 = "Hello%20World", он НЕ кодирует тексты, а отображает их как есть. Как я могу кодировать строки HTML при передаче аргументов в качестве переменных в i18n?
1 ответ
HTL не будет декодировать текст, возвращенный format
, Я думаю, что путаница исходит из документации, в которой говорится для контекста дисплея text
следующие:
Используйте это для простого содержимого HTML - кодирует весь HTML
(Источник: спецификация HTL, раздел 1.2.1, контекст дисплея)
Но это не значит, что этот контекст что-то декодирует, он кодирует теги HTML.
Так что если sighltyObj.field1
является Hello%20World
не будет отображаться как Hello World
но, как Hello%20World
как вы уже заметили.
Контекст отображения text
закодирует все HTML-теги в данном тексте, так что вы не сможете "переправить" их в текст (см. внедрение кода).
Так, например:
${'<p>This is my text</p>' @ context='text'}
создаст следующий HTML
<p>This is my text</p>
Обратите внимание, как p
теги были закодированы:
<p>
стал <p>
а также </p>
стал </p>
,
Добытчик для field1
в вашем sighltyObj
придется делать декодирование так, чтобы Hello%20World
становится Hello World
, Уже есть ответ на Stackru, который показывает вам, как это сделать: /questions/9934220/kak-sdelat-dekodirovanie-url-v-java/9934238#9934238
String result = java.net.URLDecoder.decode(url, "UTF-8");