Я использую Hibernate Validator с JSF, Richfaces. У меня есть текстовая область, в которую я вводю разделенный запятыми список доменов электронной почты. У меня есть спящий ConstraintValidator, который покорно возвращает false, если какой-либо из доменов электронной почты неверен. В другом месте кода это нарушение ограничения фиксируется и в FacesContext добавляется фатальное сообщение об ошибке. Но сообщение об ошибке не отображается там, где у меня есть тег. Скорее я получаю это в моей консоли:
org.apache.myfaces.lifecycle.RenderResponseExecutor execute
WARNING: There are some unhandled FacesMessages, this means not every FacesMessage had a chance to be rendered.
These unhandled FacesMessages are:
- Invalid Domain Name.
Версии: hibernate-validator-4.3.0.Final, myfaces-impl-2.2.12, richfaces-components-api-4.3.5.Final.
В моем проекте почти такой же код был использован на какой-то другой странице, отличается только базовый компонент, и там он без проблем отображает FacesMessage в моем фейслете.
Я прошел через исходный код org.apache.myfaces.lifecycle.RenderResponseExecutor:
List<FacesMessage> messageList = facesContext.getMessageList();
if (!messageList.isEmpty())
{
StringBuilder builder = new StringBuilder();
boolean shouldLog = false;
for (int i = 0, size = messageList.size(); i < size; i++)
{
FacesMessage message = messageList.get(i);
if (!message.isRendered())
{
builder.append("\n- ");
builder.append(message.getDetail());
shouldLog = true;
}
}
if (shouldLog)
{
log.log(Level.WARNING, "There are some unhandled FacesMessages, " +
"this means not every FacesMessage had a chance to be rendered.\n" +
"These unhandled FacesMessages are: " + builder.toString());
}
}
Если я просматриваю источник страницы, я вижу, что он там есть:
<div class="error_block">
<span>Error </span> <br />
<table id="errorMessages"><tr><td class="displayErrorMessage">Invalid Domain Name.</td></tr></table>
</div></span>
Но если я сделаю F12, его там нет. Так что почему-то не является частью DOM.