2012-09-11 30 views
1

好吧,我有以下問題:在我的Web應用程序中,我通過Primefaces的對話框控件擁有CRUD全部頁面。在新的對話框中,我有一些驗證器。例如:當用戶沒有填寫表單提交的必要字段時,表單不提交。但是,當我關閉de新對話框並再次打開時,驗證消息仍然存在!我怎樣才能擺脫這個?每次打開對話框時,我都想要一個全新的新頁面(沒有累積的驗證錯誤)!如何做到這一點?清除失效後的表單字段JSF

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets" 
      xmlns:h="http://java.sun.com/jsf/html" 
      xmlns:f="http://java.sun.com/jsf/core" 
      xmlns:p="http://primefaces.org/ui" 
      template="./../../resources/templates/baseTemplate.xhtml"> 

<ui:define name="content"> 
    <f:view id="vRoot"> 
     <p:fieldset legend="Gerenciar público"> 
      <h:form id="frmPublicos"> 
       <!-- Exibição de mensagens gerais --> 
       <p:growl id="gMessages" sticky="false" globalOnly="true" /> 

       <!-- Exibição da lista de públicos --> 
       <p:dataTable id="dtPublicos" 
          value="#{publicoBean.lstDataTablePublico}" 
          paginator="true" rows="5" 
          rowsPerPageTemplate="5,10" 
          paginatorPosition="bottom" 
          paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
          var="atual"> 
        <!-- Every time dialog opens validation messages should be cleaned --> 
        <f:facet name="header"> 
         <p:commandButton id="cbViewNovo" 
             value="Novo" type="button" 
             styleClass="cbViewNovo" 
             onclick="dlgNovo.show();" 
             update=":dlgNovoPublico" 
             process="@this"> 
          <p:resetInput target=":dlgNovoPublico"/> 
         </p:commandButton> 
        </f:facet> 
        <!-- Colunas de edição e exclusão --> 
        <p:column> 
         <f:facet name="header"> 
          <h:outputLabel value="Editar"/> 
         </f:facet> 
         <p:commandButton id="cbViewEditar" 
             image="ui-icon-pencil" 
             title="Editar" 
             update=":frmEditar:pEditarPublico" 
             oncomplete="dlgEditar.show();"> 
          <f:setPropertyActionListener value="#{atual}" target="#{publicoBean.publicoSelecionado}" /> 
         </p:commandButton> 
        </p:column> 
        <p:column> 
         <f:facet name="header"> 
          <h:outputLabel value="Excluir"/> 
         </f:facet> 
         <p:commandButton id="cbViewExcluir" onclick="dlgExcluir.show();" 
             icon="ui-icon-close" title="Excluir"> 
          <f:setPropertyActionListener value="#{atual}" target="#{publicoBean.publicoSelecionado}" /> 
         </p:commandButton> 
        </p:column> 
        <p:column> 
         <f:facet name="header"> 
          Nome 
         </f:facet> 
         <h:outputLabel id="olViewNomePublico" value="#{atual.nmePublico}"/> 
        </p:column> 
        <p:column> 
         <f:facet name="header"> 
          Tipo de público 
         </f:facet> 
         <h:outputLabel id="olViewTipoPublico" value="#{atual.tdTipoPublico}"/> 
        </p:column> 
       </p:dataTable> 
      </h:form> 

      <!-- Caixa de diálogo de inclusão --> 
      <p:dialog id="dlgNovoPublico" 
         widgetVar="dlgNovo" 
         modal="true" 
         header="Novo público" 
         resizable="false"> 
       <h:form id="frmNovo"> 
        <p:panel id="pNovoPublico"> 
         <p:messages id="mNovoMessages" redisplay="false" /> 
         <p:panelGrid columns="2"> 
          <p:outputLabel id="olNovoNomePublico" value="Nome:" for="itNovoNomePublico"/> 
          <p:inputText id="itNovoNomePublico" value="#{publicoBean.nome}" required="true" 
             requiredMessage="Digite o nome do público."/> 

          <p:outputLabel id="olNovoTipoPublico" for="somNovoTipoPublico" value="Tipo de público:"/> 
          <p:selectOneMenu id="somNovoTipoPublico" 
              value="#{publicoBean.tipoPublicoSelecionado}" 
              effect="fade" 
              converter="#{publicoBean.conversor}" 
              required="true" 
              requiredMessage="Selecione um tipo de público." 
              > 
           <f:selectItem itemLabel="Selecione um item..." itemValue=""/> 
           <f:selectItems value="#{publicoBean.lstMenuTipoPublico}" var="atual" itemLabel="#{atual.label}" itemValue="#{atual}"></f:selectItems> 
          </p:selectOneMenu> 
          <p:commandButton value="Cancelar" immediate="true" onclick="dlgNovo.hide()"/> 
          <p:commandButton id="cbNovoSalvar" value="Salvar" 
              actionListener="#{publicoBean.cadastrarPublico}" 
              oncomplete="handleSalvo(xhr, status, args);" 
              update=":frmPublicos:dtPublicos :frmNovo :frmPublicos:gMessages" 
              ajax="true"/> 
         </p:panelGrid> 
        </p:panel> 
       </h:form> 
      </p:dialog> 

      <!-- Caixa de diálogo de exclusão --> 
      <p:confirmDialog id="dialogoExcluir" message="Deseja realmente excluir?" 
          header="Excluir público" severity="alert" 
          widgetVar="dlgExcluir"> 
       <h:form id="frmExcluir"> 
        <p:commandButton id="cbExcluirCancelar" value="Cancelar" onclick="dlgExcluir.hide()" type="button" /> 
        <p:commandButton id="cbExcluirContinuar" value="Continuar" 
            update=":frmPublicos:dtPublicos :frmPublicos:gMessages" 
            oncomplete="dlgExcluir.hide()" 
            actionListener="#{publicoBean.excluirPublico}"/> 
       </h:form> 
      </p:confirmDialog> 
      <!-- Caixa de diálogo de edição --> 
      <p:dialog id="dialogoEditar" widgetVar="dlgEditar" header="Editar público" 
         resizable="false" modal="true"> 
       <h:form id="frmEditar"> 
        <p:panel id="pEditarPublico"> 
         <p:messages id="mEditarMessages" redisplay="false" /> 
         <p:panelGrid columns="2"> 
          <p:outputLabel id="olEditarNomePublico" value="Nome:" for="itEditarNomePublico"/> 
          <p:inputText id="itEditarNomePublico" value="#{publicoBean.publicoSelecionado.nmePublico}" required="true" 
             requiredMessage="Digite o nome do público."/> 

          <p:outputLabel id="olEditarTipoPublico" for="somEditarTipoPublico" value="Tipo de público:"/> 
          <p:selectOneMenu id="somEditarTipoPublico" 
              value="#{publicoBean.publicoSelecionado.tdTipoPublico}" 
              effect="fade" 
              converter="#{publicoBean.conversor}" 
              required="true" 
              requiredMessage="Selecione um tipo de público." 
              > 
           <f:selectItem itemLabel="Selecione um item..." itemValue=""/> 
           <f:selectItems value="#{publicoBean.lstMenuTipoPublico}" 
               var="atual" 
               itemLabel="#{atual.label}" 
               itemValue="#{atual}"></f:selectItems> 
          </p:selectOneMenu> 
          <p:commandButton value="Cancelar" immediate="true" onclick="dlgEditar.hide()"/> 
          <p:commandButton id="cbEditarSalvar" value="Salvar" 
              actionListener="#{publicoBean.alterarPublico}" 
              oncomplete="dlgEditar.hide();" 
              update=":frmPublicos:dtPublicos :frmEditar :frmPublicos:gMessages"/> 
         </p:panelGrid> 
        </p:panel> 
       </h:form> 
      </p:dialog> 
     </p:fieldset> 
    </f:view> 
    <!-- Javascript responsável por fechar a caixa de diálogo ao cadastrar--> 
    <script type="text/javascript"> 
     function handleSalvo(xhr, status, args){ 
      if(args.salvo){ 
       dlgNovo.hide(); 
      } 
     } 
     function handleEditar(xhr, status, args){ 
      if(args.salvo){ 
       dlgEditar.hide(); 
      } 
     } 
    </script> 
</ui:define> 

回答