3

single_selectionデータテーブルとコマンドボタンを含むページを取得しました。コマンドボタンは、選択が行われたかどうかを確認する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;
}

コマンドボタンを2回クリックする必要があることを述べておかなければなりませんが、その問題について別の質問を投稿します。

メッセージが正しく表示されるBeanValidationを使用して別のページを作成しました。このページとの唯一の違いは、他のページにはinputText、コマンドボタン、およびメッセージのみが含まれていることです。

御時間ありがとうございます

02/25/13faces-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>

以前にコメントした「2回クリック」の問題を回避するためにリダイレクトを使用しましたが、役に立ちませんでした

4

2 に答える 2

8

つまり、2つ以上のページで同じマネージド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の各メッセージには、ページ内に対応するコンポーネントがあります。

于 2013-03-02T04:35:45.517 に答える
4

更新していないため、メッセージは表示されません。あなたの:にupdate属性を追加しますp:commandButton

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

さらに、あなたがここをどのようにナビゲートしているのかわかりませんか?

于 2013-02-25T07:55:43.457 に答える