2013-02-25 68 views
0

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

问题是当没有选择时没有消息显示。如果选择了,它工作正常。

下面是页面代码:

<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> 

并为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; 
} 

不得不提的是,命令按钮必须被点击两次,但我会后一个问题为那个问题。

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

感谢您的时间

13年2月25日代号为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> 

我用来重定向避免“单击两次”的问题,我之前,但无济于事,因为你没有更新,它不会显示

回答

4

好的底线是,如果您在两个或多个页面中使用相同的托管bean,请使用for属性标识您的消息,并在bean方法中创建消息时使用相同的标识。例如:

<p:messages for="MessageId" showDetail="true" autoUpdate="true" closable="true"> 

,当你在你的托管bean创建消息:

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

所以在您的Managed Bean的每个消息都有其对应的成分在一个页面。

0

消息发表评论。添加update属性您p:commandButton

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

此外,我怎么没看到你在这里航行?

+0

我在我的命令按钮中使用了更新属性。我尝试了消息的自动更新属性true和false,但没有显示消息。导航在faces-config.xml文件中定义(更新后的问题中显示的代码) – user2067146 2013-02-25 15:40:49

+0

最后,我可以检测并修复问题...即时通讯使用同一个bean进行2页操作,并在两个页面中显示不同的消息。当我使用addMessage时,我没有使用组件id属性,所以消息处于全局模式,不知何故,这阻止了消息显示在第二页。所以我添加了组件ID属性,现在显示消息。 – user2067146 2013-03-02 04:28:26