第二次用户打开对话框时,JSF 2.0字段未被清除

问题描述:

我不知道这是否是一个常见问题,但是这个奇怪的问题让我头疼...... 我有一个奇怪的行为,我的应用程序有很多对话框,当用户打开对话框时,对话框应该显示默认内容。问题是我在显示对话框之前清除了所有bean的属性,但有时看起来表单没有被清除! 例如,这是有这个问题的一个对话框:第二次用户打开对话框时,JSF 2.0字段未被清除

how it should be 此图片显示在对话框如何显示我第一次打开它,所有字段都会被清除,则选择第二无线电。如果我更改无线电选择并在输入字段中输入内容,则数据表会立即显示相应的数据并进行搜索。所以,如果我点击“取消”(取消葡萄牙语),这个对话框就会关闭,就像预期的那样。

然后我再次打开此对话框,:

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> 

,只是删除即时=真正它工作正常:

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

但在其他对话框我有字段th在需要和需要验证... 有人可以解释我为什么会发生?

+0

的片段您发布的内容不包含最有趣的部分 - 包含值的实际字段的定义。我猜他们隐藏在''后面。我们在这里可以看到的基本上是弹出和按钮的标记 - 一切都是静态的。 – 2012-02-27 20:04:18

+0

@GrzegorzOledzki,我添加了更多信息:) – brevleq 2012-02-28 11:31:26

我已经解决了这个问题与第一种方法here

所以我创建了一个方法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(); 
} 

现在按钮cancelar以这种方式工作:

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