我正在使用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的一部分。
答案 0 :(得分:0)
正如我更新的问题所示,如果我查看源代码,我可以看到错误消息,但如果我在Chrome中执行“检查元素”,则消息不存在,这意味着它不是DOM的一部分。 在创建FacesMessage时,我添加了以下内容:
context.addMessage(null, message);
context.getPartialViewContext().getRenderIds().add("globalMessage");
在我使用id“globalMessage”。现在正在渲染FacesMessage。