Как использовать символьные объекты HTML внутри EL в JSF?
Я хочу использовать их тире в атрибуте значения для h:link
составная часть.
Вот моя попытка (в настоящее время не работает):
<h:link value="#{somethingHere} — #{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. —
является сущностью HTML и не распознается в XML. Только пять перечисленных на этой странице Википедии, "
, &
, '
, <
а также >
, признаются в XML.
Facelets / XML по умолчанию уже использует UTF-8, так что вы можете просто поместить фактический символ в шаблон как обычный / незашифрованный (при условии, что редактор может сохранить файл как UTF-8).
<h:link value="#{somethingHere} — #{anotherHere}">
Если по какой-то причине это не вариант, вместо этого можно использовать числовую ссылку на символ в формате &#nnnn;
вроде как можно  
представлять
в XML. Вы можете найти ссылку на числовой символ в fileformat.info: символ Юникода 'EM DASH' (U+2014)
Кодировки
HTML Entity (десятичный)
—
Итак, это должно сделать для вас:
<h:link value="#{somethingHere} — #{anotherHere}">
Альтернатива, которая должна более точно удовлетворять точному сообщению об ошибке, - это объявить ссылку на сущность непосредственно в типе документа.
<!DOCTYPE html [
<!ENTITY mdash "—">
]>
Но это не общая рекомендация / подход, так как вам нужно повторить это для каждого отдельного XML-файла, в котором используется символ.