primefaces消息未显示

use*_*146 2 messages primefaces

我有一个带有single_selection数据表和命令按钮的页面.commandbutton调用一个bean方法来验证是否进行了选择.如果不是,它应该显示警告用户的消息.如果进行了选择,则导航到另一个页面.

问题是没有选择时不会显示任何消息.如果做出选择,它可以正常工作.

这是页面的代码:

<h:body>
<h:form id="form">
<p:dataTable id="TablaSociedades" var="soc" value="#{Sesion.tablaSociedades}" emptyMessage="No hay Registros que Mostrar" selection="#{Sesion.sociedadUsuario}">  
  <f:facet name="header">Sociedades asociadas al Usuario</f:facet> 
     <p:column selectionMode="single" style="width:18px" />  
     <p:column>
        <f:facet name="header">
           <h:outputText value="Sociedad" />
        </f:facet>
           <h:outputText value="#{soc.nombreSociedad}" />
     </p:column>
  <f:facet name="footer">  
     <p:commandButton action="#{Sesion.mostrarMenu()}" value="Continuar" process=":form" />  
   </f:facet> 
</p:dataTable>
<br/>
<div>
  <p:messages id="messages2" showDetail="true" autoUpdate="false" closable="true" /> 
</div>
</h:form>
</h:body>
Run Code Online (Sandbox Code Playgroud)

以及bean方法的代码:

  public boolean mostrarMenu()
{
    boolean resp = true;

    if (sociedadUsuario.getNombreSociedad().equals("")) //no selection
    {
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage  (FacesMessage.SEVERITY_WARN,"Seleccione una Sociedad", "No puede Continuar"));  
        resp = false;
    }

    return resp;
}
Run Code Online (Sandbox Code Playgroud)

我必须提到命令按钮必须被点击两次,但我会针对该问题发布另一个问题.

我做了另一个带有bean验证的页面,其中消息显示正确,与此页面的唯一区别是另一个页面只包含inputText,commandbutton和messages.

谢谢你的时间

02/25/13 faces-config.xml文件的代码.

<navigation-rule>
   <from-view-id>/elegirSociedad.xhtml</from-view-id>
   <navigation-case>
    <from-action>#{Sesion.mostrarMenu()}</from-action>
    <from-outcome>true</from-outcome>
    <to-view-id>/principal.xhtml</to-view-id>
    <redirect />
   </navigation-case> 
</navigation-rule>
Run Code Online (Sandbox Code Playgroud)

我使用重定向来避免我之前评论的"点击两次"问题但无济于事

use*_*146 7

最重要的是,如果您为两个或更多页面使用相同的托管bean,请使用该for属性标识您的消息,并在bean方法中创建消息时使用相同的ID.例如:

<p:messages for="MessageId" showDetail="true" autoUpdate="true" closable="true">
Run Code Online (Sandbox Code Playgroud)

当您在托管bean中创建消息时:

FacesContext.getCurrentInstance().addMessage("MessageId", new FacesMessage  (FacesMessage.SEVERITY_WARN,"Be Warned!", "You did something wrong!"));  
Run Code Online (Sandbox Code Playgroud)

因此,Managed Bean中的每条消息都在页面中具有相应的组件.


par*_*lov 5

由于您没有更新,因此未显示消息。update将属性添加到您的p:commandButton

<p:commandButton action="#{Sesion.mostrarMenu()}" value="Continuar" process=":form" update=":form:messages2"/>
Run Code Online (Sandbox Code Playgroud)

另外我不明白你是如何导航到这里的?