我的页面上有一个命令按钮。
<h:commandButton id="makeSearch" value="#{msg.makeWycena}">
<f:ajax event="click" render="@all" listener="#{searchBean.makeSearch()}"/>
</h:commandButton>
makeSearch()
方法首先检查数据库中的值,如果此值为null
,则执行某些逻辑。但是当值不是null
时,我想显示错误消息。
由于这个原因,我考虑制作<h:outputtext rendered = {not null XXX}/>
并制作特殊变量XXX,但我非常确定可以使用普通<h:message />
形式完成,但无法找到。
我的代码如下所示:
else {
FacesContext fc = FacesContext.getCurrentInstance();
fc.addMessage(null , new FacesMessage("XXXXXXXX"));
return null;
}
我希望消息XXXXXXXXX显示在:
<h:message for="makeSearch" globalOnly="true" style="color:red;margin:8px;"/>
我之前发布的命令按钮旁边。现在它呈现在页面底部
经过几次更改后,我的代码现在看起来像这样:
<h:form id="detailsForm" prependId="false">
<h:commandButton id="makeSearch" value="#{msg.makeWycena}">
<f:ajax event="click" render="@all" listener="#{searchBean.makeSearch()}"/>
</h:commandButton>
<h:message for="makeSearch" id ="makeSearchError" style="color:red;margin:6px;left-margin:10px;"/>
和bean代码:
else {FacesContext.getCurrentInstance().addMessage("detailsForm:makeSearchError" ,
new FacesMessage("XXXXXXXXXXXX")); }
但仍然。消息不会在h:message中呈现。我也尝试了detailForm:makeSeach,它也无济于事
答案 0 :(得分:0)
facesContext.addMessage(null, message)
最终位于<h:messages globalOnly="true">
,而不是<h:message for="...">
。请注意,globalOnly="true"
上的<h:message>
为not supported。
所以,替换
<h:message for="makeSearch" globalOnly="true" style="color:red;margin:8px;"/>
通过
<h:messages globalOnly="true" style="color:red;margin:8px;"/>
对于您根据评论尝试使用固定消息客户端ID,这也是无效的。您应该通过其for
属性指定与消息关联的组件的客户端ID,而不是消息组件本身。所以,你不应该使用
facesContext.addMessage("detailsForm:makeSearchError", message);
但是
facesContext.addMessage("detailsForm:makeSearch", message);
毕竟,如果您只是将<h:message>
修改为真<h:messages>
,则不需要这样做。