2011-04-29 103 views
7

Tengo una función de importación que analizará el archivo XML que contiene la información de la versión del documento y lo guardará en la base de datos. Si el usuario intenta cargar la versión ya existente, necesito mostrar el cuadro de diálogo de confirmación como "La versión ya existe ¿quiere sobrescribir ...?" ok, cancelar.Cómo mostrar un cuadro de diálogo de confirmación (Primefaces) desde el bean de respaldo

Estoy usando Mozarra 2.0.3, Prime enfrenta 2.2 RC2, Glass Fish 3 y estoy tratando de esta manera.

<h:form id="conDialog"> 
    <p:commandButton value="getConfirmMsg" update="conDialog" action="#{buttonBean.getConfirmMsg()}" 
     oncomplete="confirmation.show()"/> 
    <p:growl id="messages1" globalOnly="true"/> 
    <p:confirmDialog message="Version already exists. Do you want to override it?" 
     rendered="#{buttonBean.showConfirm}" 
     header="Version already exist" severity="alert" widgetVar="confirmation"> 
     <p:commandButton value="OK" update="messages1" oncomplete="confirmation.hide()" 
      action="#{buttonBean.overrideVersion}" /> 
     <p:commandButton value="Cancel" onclick="confirmation.hide()" type="button" /> 
    </p:confirmDialog> 
</h:form> 

BackingBean

@ManagedBean 
@RequestScoped 
public class ButtonBean { 

    boolean showConfirm = false; 

    public boolean isShowConfirm() { 
     return showConfirm; 
    } 

    public void setShowConfirm(boolean showConfirm) { 
     this.showConfirm = showConfirm; 
    } 

    public void overrideVersion() { 
     System.out.println("Version alrady exists...Overriding..."); 
     FacesMessage msg = new FacesMessage("Action is successful"); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 

    public void getConfirmMsg() { 
     System.out.println("Inside getConfirmMsg()...."); 
     showConfirm = true; 
     System.out.println("showConfirm: " + showConfirm); 
    } 
} 

Cuando hago clic en "OK" la acción no está disparando. ¿Hay algún error en el código anterior?

+0

¿Qué has intentado hasta ahora? Para simplemente mostrar un cuadro de diálogo, puede utilizar Primefaces 'p: dialog'. –

+0

Hola Matt, tengo que hacer eso desde el lado del servidor. if (VersionExists) {mostrar un diálogo de confirmación.} – neni

Respuesta

3

No es posible obtener la confirmación del cliente durante el procesamiento de en el servidor.

Usted tiene dos opciones:

  1. obtiene el permiso de sobreescritura antes de llamar al método de acción, por ejemplo, con una casilla de verificación "¿Sobrescribir archivo si existe?" o

  2. Tiene que detener el procesamiento, establecer un indicador y devolver nulo para volver a cargar la página actual en el navegador. Luego podría mostrar el p:dialog dependiendo del estado de la bandera.

+0

Hola Matt, ¿puedes mirar el código que he publicado? – neni

+0

@Veerendra El CommandButton debería funcionar. ¿Hay algún error de javascript en el navegador? –

+0

No Matt, no hay errores de JavaScript. – neni

2

Se enfrenta al problema típico de Primefaces.

Cuando se muestra su página y buttonBean.showConfirm = false, este elemento no se representa. Esto significa que no aparecerá en DOM-Tree. No importa lo que haga después, un elemento no existente no se puede mostrar u ocultar.

En realidad, hay dos maneras de resolver su problema.

  1. Utilice un comando remoto para que el código HTML no procesado se transmita desde su servidor.
  2. Utilice css "display: none" en lugar de rendered = "false".
0

Me enfrenté a una pregunta muy similar.La solución que se me ocurrió fue dividir la lógica en 2 - primero, cuando se presiona el botón usar 'acción' para preparar los datos para la validación y usar 'oncomplete' para ejecutar un comando remoto que muestra el diálogo de confirmación en el que ' OK 'es la acción real.

Cuestiones relacionadas