Как использовать символьные объекты HTML внутри EL в JSF?

Я хочу использовать их тире в атрибуте значения для h:link составная часть.

Вот моя попытка (в настоящее время не работает):

<h:link value="#{somethingHere} &mdash; #{anotherHere}">
    <f:param name="identifier" value="#{somethingHere.identifier}" />
</h:link>

Это приводит к FaceletsException:

FaceletException: Error Parsing /index.xhtml: Error Traced[line: 13]
                The entity "mdash" was referenced, but not declared.
at com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:394)
...

Я знаю, что вместо этого я могу использовать привязку HTML, но есть ли способ сделать это внутри выражения EL? Как правильно это сделать?

1 ответ

Решение

Facelets основаны на XML и обрабатываются анализатором XML. &mdash; является сущностью HTML и не распознается в XML. Только пять перечисленных на этой странице Википедии, &quot;, &amp;, &apos;, &lt; а также &gt;, признаются в XML.

Facelets / XML по умолчанию уже использует UTF-8, так что вы можете просто поместить фактический символ в шаблон как обычный / незашифрованный (при условии, что редактор может сохранить файл как UTF-8).

<h:link value="#{somethingHere} — #{anotherHere}">

Если по какой-то причине это не вариант, вместо этого можно использовать числовую ссылку на символ в формате &#nnnn;вроде как можно &#160; представлять &nbsp; в XML. Вы можете найти ссылку на числовой символ в fileformat.info: символ Юникода 'EM DASH' (U+2014)

Кодировки

HTML Entity (десятичный) &#8212;

Итак, это должно сделать для вас:

<h:link value="#{somethingHere} &#8212; #{anotherHere}">

Альтернатива, которая должна более точно удовлетворять точному сообщению об ошибке, - это объявить ссылку на сущность непосредственно в типе документа.

<!DOCTYPE html [
    <!ENTITY mdash "&#8212;"> 
]>

Но это не общая рекомендация / подход, так как вам нужно повторить это для каждого отдельного XML-файла, в котором используется символ.

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