Как правильно объединить два свойства сообщения в Grails? - PullRequest
0 голосов
/ 11 апреля 2019

То же свойство сообщения (закодированное как HTML) в одном поле ввода отображается правильно, в то время как оно (также закодированное в виде HTML) отображает теги HTML в другом поле ввода.Это происходит в представлении GSP.

Я хотел бы объединить свойства сообщения, чтобы избежать нарушения принципа СУХОЙ.

Вход 1

<input type="text" class="freeform search-input" title="${g.message(code:"registration.classSearch.field.courseNumberLevels.placeholder.tooltip", encodeAs: "HTML")}">

Вход 2 Ложная ветвь троичного оператора - вот где я вижу проблему.Я не вырезал троичную на всякий случай, если это может быть частью проблемы.

<input title="${config.config.contains('keyword')? g.message(code:"registration.classSearch.field.keywordinputbox.placeholder.tooltip", encodeAs: "HTML"):g.message(code:"registration.classSearch.field.inputbox.placeholder.tooltip", encodeAs: "HTML") + "<br><br>" + g.message(code:"registration.classSearch.field.courseNumberLevels.placeholder.tooltip", encodeAs: "HTML")}">

Удаление encodeAs: "HTML" из входа 2 приводит к его правильному отображению.

<input title="${config.config.contains('keyword')? g.message(code:"registration.classSearch.field.keywordinputbox.placeholder.tooltip", encodeAs: "HTML"):g.message(code:"registration.classSearch.field.inputbox.placeholder.tooltip", encodeAs: "HTML") + "<br><br>" + g.message(code:"registration.classSearch.field.courseNumberLevels.placeholder.tooltip")}"

Удаление двух <br><br> не имеет ожидаемого эффекта.Изменение первого g.message на свойство обычного текстового сообщения также не оказывает влияния.

Вывод для Вход 1 :

<input type="text" class="freeform search-input" title="<b>Undergraduate Level</b>:<br>0&amp;ndash;4999<br><br><b>Graduate Level</b>:</br>5000+">

Выход для Вход 2 с encodeAs:

<input title="These special characters are ignored: *^&amp;#39;!@$#&amp;amp;?[ ] ( ) |. The % is allowed.&amp;lt;b&amp;gt;Undergraduate Level&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt;0&amp;amp;ndash;4999&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;Graduate Level&amp;lt;/b&amp;gt;:&amp;lt;/br&amp;gt;5000+" type="text" class="freeform search-input">

Выход для Вход 2 без encodeAs:

<input title="These special characters are ignored: *^&amp;#39;!@$#&amp;amp;?[ ] ( ) |. The % is allowed.<b>Undergraduate Level</b>:<br>0&amp;ndash;4999<br><br><b>Graduate Level</b>:</br>5000+" type="text" class="freeform search-input">

Я бы ожидал этоговести себя одинаково с конкатенацией и без нее, но это не так.Разве мы не должны объединять этот путь?

ОБНОВЛЕНИЕ Этот поток SO о тегах HTML в message.properties говорит о кодировании HTML для предотвращения XSS, что позволило мне понять, что encodeAs делает то, что и должно бытьделать - кодировать сообщение как HTML.Удаление encodeAs позволило HTML отображаться вместо того, чтобы быть закодированным как сущности HTML.

Но это все еще не объясняет, почему HTML-код Input 1 отображается, в то время как Input 2 имеет HTML-объекты.

Ответы [ 3 ]

0 голосов
/ 12 апреля 2019

Так что, если это не одиночная кавычка ... обратите внимание, что Stackoverflow даже не распознает ваш ввод 2 как HTML ... это потому, что вы пропускаете закрывающее ">" в самом конце строки .

0 голосов
/ 12 апреля 2019

Этот SO поток о тегах HTML в message.properties говорит о кодировке HTML для предотвращения XSS, что позволило мне понять, что encodeAs делал то, что должен был делать - кодировал сообщение как HTML.Удаление encodeAs позволило HTML отображаться вместо того, чтобы быть закодированным как сущности HTML.

Итак, есть два возможных обходных пути, так как я все еще не знаю, почему encodeAs ведет себя по-разному:

  1. Оставьте HTML в message.properties и удалите encodeAs: "HTML" из g.message метода
  2. Разделите исходное сообщение на различные части и переместите HTML в GSP
0 голосов
/ 12 апреля 2019

для объединения двух свойств сообщения

эту проблему можно упростить, поскольку проблему сочетают две строки в html.

title = "${g.message(code:'1')}<br><br/>${g.message(code:'2')}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...