2016-06-14 22 views
0

2つの入力フィールドとcommandButtonを持つダイアログがあり、オブジェクトを追加できます。ユーザーが空白のフィールドを残すと、メッセージが表示され、ダイアログが開いたままになります。しかし、ユーザーがすべてのフィールドを完了してcommandButtonを押すと、オブジェクトは追加されますが、ダイアログは閉じません。アクション完了時にPrimefacesダイアログが閉じない

incidenciaBean.javaのView.xhtml

<h:form id="allIncidenciasAux"> 
    <div id="divBotonCrear"> 
     <p:commandButton value="Añadir Incidencia" type="button" onclick="PF('dlg1').show();"/> 
    </div> <br/> 

    <p:tabView> 
     <p:tab title="All"> 
      <ui:repeat value="#{incidenciaBean.allIncidencias}" var="aux" > 
       <p:panel id="basic" header="#{aux.titulo}" style="margin-bottom:20px" toggleable="true" collapsed="true" styleClass="#{ aux.solucionado eq 'false' ? 'incNS' : null}"> 
        <h:panelGrid columns="2"> 
         <h:panelGrid style="background-color: #B6C2DE; padding: 10px;"> 
          <h:panelGrid columns="2"> 
           <h:outputText value="Fecha de publicacion: " style="font-weight: bold"/> 
           <h:outputText value="#{aux.fecha_publicacion}"/> 
          </h:panelGrid> 
          <h:panelGrid columns="2"> 
           <h:outputText value="Autor: " style="font-weight: bold"/> 
           <h:outputText value="#{aux.nombreCompleto}"/> 
          </h:panelGrid> 
          <h:panelGrid columns="2"> 
           <h:outputText value="Solucionado: " style="font-weight: bold"/> 
           <h:outputText value="#{aux.solucionado ? 'Si' : 'No'}"/> 
          </h:panelGrid> 
         </h:panelGrid> 

         <h:panelGrid> 
          <h:outputText value="Descripción: " style="font-weight: bold"/> 
          <h:outputText value="#{aux.descripcion}"/> 
         </h:panelGrid> 
        </h:panelGrid> <br/> 
       </p:panel> 
      </ui:repeat> 
     </p:tab> 
    </p:tabView> 
    <p:growl id="growl" showDetail="true" sticky="false" life="8000"/> 
</h:form> 

<h:form id="dialogAddIncidencia"> 
    <p:dialog id="newIncDialogo" header="Nueva Incidencia" widgetVar="dlg1" minHeight="40" resizable="false"> 
     <p:ajax event="close" listener="#{incidenciaBean.handleClose}" update=":dialogAddIncidencia"/> 
     <p:outputLabel value="Título"/> <br/> 
     <p:inputTextarea id="tituloEdit" value="#{incidenciaBean.titulo}" rows="2" cols="50" counter="displayTA" maxlength="50" counterTemplate="{0} caracteres restantes" autoResize="true" required="true" requiredMessage="Título necesario"/> <br/> 
     <p:outputLabel id="displayTA"/> <br/> <br/> 

     <p:outputLabel value="Descripción: "/> <br/> 
     <p:inputTextarea id="descripcion" value="#{incidenciaBean.descripcion}" rows="10" cols="50" counter="displayDA" maxlength="200" counterTemplate="{0} caracteres restantes" autoResize="true" required="true" requiredMessage="Descripción necesaria"/> <br/> 
     <p:outputLabel id="displayDA"/> <br/> <br/> 

     <p:commandButton value="Guardar Incidencia" action="#{incidenciaBean.insertIncidencia()}" oncomplete="if (#{incidenciaBean.camposNoVacios()}) dlg1.hide()" update=":allIncidenciasAux :allIncidenciasAux:growl"/> 
     <p:messages for="titulo"/> 
     <p:messages for="descripcion"/> 
    </p:dialog>  
</h:form> 

方法

public void insertIncidencia(){   
    HttpSession httpSession = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true); 
    UsuarioBean usuarioHttp = (UsuarioBean) httpSession.getAttribute("usuarioSession"); 
    this.idComunidad = usuarioHttp.idComunidad; 
    this.idUsuario = usuarioHttp.getIdUsuario(); 
    this.solucionado = false; 
    this.fecha_solucion = null; 
    DateFormat dateFormat = new SimpleDateFormat("DD-MM-YYYY"); 
    Date date = new Date(); 
    this.fecha_publicacion = dateFormat.format(date); 

    if(ejb_incidencia.existIncidenciaTitulo(this.titulo, this.descripcion)){ 
     FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error:", 
       "Ya existe una incidencia con el mismo título y descripción." 
       + "Por favor, compruebe que no se trata de la misma incidencia.")); 
    } else{ 
     ejb_incidencia.realizaRegistroIncidencia(this); 
     FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info:", 
       "La incidencia se ha registrado correctamente")); 
     initialStatusIncidencia(); 
    } 

} 

public boolean camposNoVacios(){ 
    return !(this.titulo == null || this.descripcion == null); 
} 

public void initialStatusIncidencia(){ 
    this.titulo = null; 
    this.descripcion = null; 
} 

public void handleClose (CloseEvent event){ 
    initialStatusIncidencia(); 
} 
+0

次回は[mcve]の作成を開始してください。より多くのコードを削除してから作業を開始してください。私はあなたが 'oncomplete ="を変更した場合、(#{incidenciaBean.camposNoVacios()})dlg1.hide() "' 'oncomplete =" dlg1.hide() htmlがレンダリングされるときにのみ評価されます。オンコンプリートを呼び出す必要がないときまた、次回は常にバージョン情報を投稿します。 [ask]、およびhttp://www.stackoverflow.com/tags/jsf/infoを参照してください。 – Kukeltje

答えて

0

あなたはoncompleteを使用して正しいです。しかし、私はあなたのif (#{incidenciaBean.camposNoVacios()})声明が本当に評価するとは思わない。ダイヤルウージは、camposNoVacios()が返された場合にのみ非表示になります(titulodescripcionの両方がnullではない場合)。 insertIncidencia()のelseステートメント(成功ケースと仮定します)で、initialStatusIncidencia()でヌルに設定します。

だからあなたのプログラムがtitulodescripcionを設定し、彼らはinsertIncidencia()nullではありません、そして、彼らはcamposNoVacios()nullていないかどうかを確認するためにチェックする前にnullにそれらを設定することを確認します。

関連する問題