FacesMessage не отображается - PullRequest
0 голосов
/ 29 апреля 2018

Я использую 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.

1 Ответ

0 голосов
/ 04 мая 2018

Поскольку мой обновленный вопрос показывает, что если я просматриваю источник, я вижу сообщение об ошибке, но если я делаю «Инспектировать элемент» в Chrome, сообщения там нет, это означает, что оно не является частью DOM. При создании сообщения FacesMessage я добавил следующее:

context.addMessage(null, message);
context.getPartialViewContext().getRenderIds().add("globalMessage");

И я использовал идентификатор "globalMessage". Теперь FacesMessage визуализируется.

...