FacesMessage未呈现

时间:2018-04-29 06:56:44

标签: jsf richfaces hibernate-validator myfaces

我正在使用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。 在我的项目中,几乎相同的代码已经在其他页面中使用,只有支持bean是不同的&它在我的facelet中显示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 :(得分:0)

正如我更新的问题所示,如果我查看源代码,我可以看到错误消息,但如果我在Chrome中执行“检查元素”,则消息不存在,这意味着它不是DOM的一部分。 在创建FacesMessage时,我添加了以下内容:

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

在我使用id“globalMessage”。现在正在渲染FacesMessage。

相关问题