То же свойство сообщения (закодированное как 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&ndash;4999<br><br><b>Graduate Level</b>:</br>5000+">
Выход для Вход 2 с encodeAs
:
<input title="These special characters are ignored: *^&#39;!@$#&amp;?[ ] ( ) |. The % is allowed.&lt;b&gt;Undergraduate Level&lt;/b&gt;:&lt;br&gt;0&amp;ndash;4999&lt;br&gt;&lt;br&gt;&lt;b&gt;Graduate Level&lt;/b&gt;:&lt;/br&gt;5000+" type="text" class="freeform search-input">
Выход для Вход 2 без encodeAs
:
<input title="These special characters are ignored: *^&#39;!@$#&amp;?[ ] ( ) |. The % is allowed.<b>Undergraduate Level</b>:<br>0&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-объекты.