Могу ли я использовать визуальный контекст дисплея вместе с меткой 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

&lt;p&gt;This is my text&lt;/p&gt;

Обратите внимание, как p теги были закодированы:

<p> стал &lt;p&gt; а также </p> стал &lt;/p&gt,

Добытчик для 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");

Другие вопросы по тегам