2012-02-27 5 views
0

一般的な問題かどうかわかりませんが、この奇妙な問題が頭痛を与えています... 私は奇妙な動作をしていますアプリケーションには多くのダイアログがあり、ユーザーがダイアログを開くとダイアログにはデフォルトのコンテンツが表示されます。問題は、ダイアログを表示する前にすべてのBeanのプロパティをクリアすることですが、フォームがクリアされていないように見えることがあります。 例えば、これは、この問題を持っているダイアログのいずれかです。JSF 2.0ユーザーが2回目のダイアログを開いたときにフィールドがクリアされない

how it should be ダイアログは、私はそれを最初に開いたときに表示され、すべてのフィールドがクリアされ、第2の無線が選択されているどのようにこの画像を示しています。ラジオの選択を変更して入力フィールドに何かを入力すると、データテーブルは検索に応じてすぐにデータを表示します。したがって、「Cancelar」(ポルトガル語でキャンセル)をクリックすると、このダイアログは閉じられています(期待どおり)。フィールドが作られた最後の版のユーザーを保存

how it is shown after oppened after cancel action

はその後、私は再びこのダイアログを開きます。私はBeanをクリアしていないと思ったが、F5(リフレッシュ)を押すだけでダイアログが最初のイメージのように表示される。なぜか分からないけど、いくつかのフィールドは更新されていない!!

私のダイアログがこのテンプレートを使用して作成されます。

<ui:component> 
<hrgi:popup id="#{idPopup}" titulo="#{titulo}" renderizar="#{popup.visivel}" 
      bordaConteudo="#{bordaConteudo eq null?true:bordaConteudo}"> 
    <f:facet name="cabecalho"> 
     <ui:insert name="cabecalho"></ui:insert> 
    </f:facet> 
    <f:facet name="conteudo"> 
     <h:panelGroup id="#{idPopup}Conteudo" layout="block" style="width:100%"> 
      <p:focus/> 
      <ui:insert name="conteudo">Nenhum conteúdo definido!</ui:insert> 
     </h:panelGroup> 
    </f:facet> 
    <f:facet name="botoes"> 
     <h:panelGroup style="width:100%"> 
      <h:panelGrid id="#{idPopup}PainelMensagens" style="width:100%"> 
       <p:messages/> 
      </h:panelGrid> 
      <ui:insert name="barraDeBotoes"> 
       <h:panelGroup layout="block" style="width:100%"> 
        <p:commandButton value="CANCELAR" styleClass="hrgi-botao-popup" 
            immediate="true" update="@form" 
            action="#{controladorPopup.fechar}"/> 
        <p:commandButton value="OK" styleClass="hrgi-botao-popup" 
            action="#{controladorPopup.submit}" update="@form alerta #{atualizar}"> 
         <f:param name="REQUIRED" value="true"/> 
        </p:commandButton> 
       </h:panelGroup> 
      </ui:insert> 
     </h:panelGroup> 
    </f:facet> 
</hrgi:popup> 
</ui:component> 

印刷に示すダイアログがこうして作成されます。私は、「Cancelar」ボタンのテンプレートコードを変更した場合

<ui:composition template="../templates/popupSubmit.xhtml"> 
<ui:param name="titulo" value="#{cadastroMsg['popup.cadastro.listagem_empresa.titulo']}" /> 
<ui:param name="popup" value="#{modeloPopupBuscaEmpresa}" /> 
<ui:param name="controladorPopup" value="#{controladorPopupBuscaEmpresa}" /> 
<ui:define name="conteudo"> 
    <h:panelGroup layout="block" styleClass="hrgi-div-form clearfix"> 
     <hrgi:listagem listenerBusca="#{controladorListagemEmpresa}" 
         valorBusca="#{modeloListagemEmpresa.valorBusca}"> 
      <f:facet name="filtrosAdicionais"> 
       <h:panelGroup layout="block"> 
        <h:outputText value="#{msgGerais['gerais.listagem.filtro']}"/> 
        <h:selectOneRadio value="#{modeloListagemEmpresa.tipoFiltro}" immediate="true"> 
         <f:selectItem itemLabel="CNPJ" itemValue="0"/> 
         <f:selectItem itemLabel="Apelido" itemValue="1"/> 
         <f:ajax event="change" immediate="true" 
           render="tabelaListagem" 
           listener="#{controladorListagemEmpresa.atualizarTipoFiltro}"/> 
        </h:selectOneRadio> 
       </h:panelGroup> 
      </f:facet> 
      <f:facet name="tabela"> 
       <h:panelGroup layout="block" style="height: 219px; width: 103%"> 
        <p:dataTable value="#{modeloListagemEmpresa.itens}" 
           scrollable="true" height="194" var="empresa" 
           emptyMessage="#{msgGerais['gerais.sem_dados']}" 
           selectionMode="single" onRowUnselectUpdate="painelInformacoes" 
           selection="#{modeloListagemEmpresa.itemSelecionado}" 
           onRowSelectUpdate="painelInformacoes"> 
         <p:column style="width:20%" 
            headerText="Documento"> 
          <h:outputText value="#{empresa.cnpj}"/> 
         </p:column> 
         <p:column style="width:80%" 
            headerText="Apelido"> 
          <h:outputText value="#{empresa.nomeEmpresa}"/> 
         </p:column> 
        </p:dataTable> 
       </h:panelGroup> 
      </f:facet> 
      <f:facet name="informacoes"> 
       <ui:include src="../../outros/painelInformacoesBasicasEmpresa.xhtml"> 
        <ui:param name="modeloPopup" value="#{modeloListagemEmpresa}"/> 
        <ui:param name="pessoaSelecionada" value="#{controladorListagemEmpresa.pessoaSelecionada}"/> 
       </ui:include> 
      </f:facet> 
     </hrgi:listagem> 
     <p:messages/> 
    </h:panelGroup> 
</ui:define> 
</ui:composition> 

を、単に即時= trueを削除すると正常に動作します:

<p:commandButton value="CANCELAR" styleClass="hrgi-botao-popup" 
            update="@form" 
            action="#{controladorPopup.fechar}"/> 

他のダイアログでは、で必要とされており、検証が必要... 誰かが私になぜそれが起こっている説明できますか?

+0

スニペットをあなたが掲示したものは、最も興味深い部分を含んでいません - 値を含む実際のフィールドの定義。私は彼らが ''の背後に隠れていると思う。ここで見ることができるのは、基本的にポップアップとボタンのマークアップです。静的なものすべてです。 –

+0

@ GrzegorzOledzki、私はさらに情報を追加しました:) – brevleq

答えて

1

私は最初のアプローチでhere

をこの問題を解決してきたので、私は、メソッドcancelar作成しました:このように動作しますcancelar

public void cancelar(){ 
    fechar(); 
    //Limpa todos os campos do formulário 
    FacesContext context = FacesContext.getCurrentInstance(); 
    Application application = context.getApplication(); 
    ViewHandler viewHandler = application.getViewHandler(); 
    UIViewRoot viewRoot = viewHandler.createView(context, context 
      .getViewRoot().getViewId()); 
    context.setViewRoot(viewRoot); 
    context.renderResponse(); 
} 

ボタン:

<p:commandButton value="CANCELAR" styleClass="hrgi-botao-popup" 
    update="@form" immediate="true" action="#{controladorPopup.cancelar}"/> 
関連する問題