我有一个带有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>
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和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>
我使用重定向来避免我之前发表评论的“点击两次”问题,但无济于事
答案 0 :(得分:6)
最重要的是,如果您为两个或更多页面使用相同的托管bean,请使用for
属性标识您的消息,并在bean方法中创建消息时使用相同的ID。例如:
<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中的每条消息都在页面中有相应的组件。
答案 1 :(得分:3)
由于您未更新消息,因此未显示消息。将update
属性添加到p:commandButton
:
<p:commandButton action="#{Sesion.mostrarMenu()}" value="Continuar" process=":form" update=":form:messages2"/>
另外,我不知道你在这里如何导航?