0

我的页面上有一个命令按钮。

<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;"/>

和豆代码:

else {FacesContext.getCurrentInstance().addMessage("detailsForm:makeSearchError" ,
   new FacesMessage("XXXXXXXXXXXX")); }

但仍然。消息不在 h:message 中呈现。我也试过 detailForm:makeSeach 也没有帮助

4

1 回答 1

0

facesContext.addMessage(null, message)结尾是 a ,而<h:messages globalOnly="true">不是 a <h:message for="...">。请注意,globalOnly="true"支持.<h:message>

所以,更换

<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>为 true ,那是不必要的<h:messages>

于 2013-10-08T16:47:57.923 回答