Puro Java/JSF aplicación para doble presentar la prevención

Estamos usando JSF 2.0 en WebSphere v8.5 con varias bibliotecas de componentes de PrimeFaces 4.0, Tomahawk 2.0, RichFaces, etc.

Estoy buscando un mecanismo genérico para evitar la re-presentación cuando se actualiza la página, o cuando el botón enviar se hace clic una vez más. Tengo muchas aplicaciones en diferentes escenarios.

Por ahora he considerado deshabilitar el botón con un pedazo de JavaScript en onclick atributo, pero esto no es satisfactorio. Estoy buscando un puro implementación de Java para este propósito, algo así como el Struts2 <s:token>.

Hace Ajax para superar la forma de re-presentación del problema? como sólo una parte de la página se procesa, no toda la página o redirección
Deshabilitar el evento onClick probablemente no será sufissiant un temporizador de retardo se requiere para hacer el truco
Sí @NassimMOUALEK puedo alcanzar la desactivación del botón hasta que el ajax completar su representación
no es exactamente el problema que yo estaba pensando, cuando el usuario haga clic varias veces, y muy rápido en el botón, un retraso antes de presentar es necesaria para decidir si usted debe presentar o no
A la derecha, pero creo que la página web de JS es mucho más rápido que un humano (hacer clic una y otra vez). la primera acción que se realiza onclick es deshabilitar el botón de ajax activar este botón cuando se complete su ciclo. Así que por esto no la superposición de evento ocurra

OriginalEl autor Sarz | 2014-04-25

2 Kommentare

  1. 17

    Estoy buscando un mecanismo genérico para evitar la re-presentación cuando se actualiza la página

    Para que al menos hay 2 soluciones que no pueden ser combinadas:

    1. Realizar una redirección después sincrónico post. De esta manera la actualización sólo sería volver a ejecutar la redirigido solicitud GET en lugar de la solicitud inicial. Desventaja: no se puede hacer uso de la solicitud de posibilidades para proporcionar retroalimentación para el usuario final. JSF 2.0 ha resuelto por ofrecer a la nueva flash alcance. Véase también Cómo mostrar las caras mensaje en la página de redirección.

    2. Realizar el POST de forma asincrónica (el uso de ajax). De esta manera la actualización sólo sería volver a ejecutar la petición inicial GET que abre el formulario. Usted sólo necesita para asegurarse de que los formularios se abrió inicialmente por una petición GET, es decir, que nunca se debe realizar de la página a la página de navegación por POST (que es en su propio ya que un mal diseño de todos modos). Véase también Cuando debo usar h:outputLink en lugar de h:commandLink?


    o cuando el botón enviar se hace clic una vez más

    Para que básicamente hay también al menos 2 soluciones, lo que podría en caso de ser necesario combinado:

    1. Acaba de bloquear a los usuarios nales de ser capaz de pulsar el botón de enviar durante el envío y/o después de la exitosa presentar. Hay varias maneras para esto, todo dependiendo de la concreta funcionales y los requisitos de diseño. Usted puede utilizar JavaScript para deshabilitar el botón durante presentar. Usted puede utilizar JSF del disabled o rendered atributos para desactivar u ocultar el botón después de enviar. Véase también Cómo hacer doble clic en la prevención en JSF 2. También puede utilizar una ventana superpuesta durante el procesamiento de peticiones ajax para bloquear a cualquier usuario final de la interacción. PrimeFaces ha <p:blockUI> para el propósito.

    2. Validar la singularidad de la nueva entidad en el lado del servidor. Esto es mucho más robusta si se desea absolutamente para evitar la duplicación, por razones técnicas, en lugar de por razones funcionales. Es bastante simple: se pone una UNIQUE restricción sobre la base de datos de la columna en cuestión. Si esta restricción se viola, entonces la DB y DB interacción marco como JPA) va a lanzar una violación de la restricción de excepción. Esto es mejor hacerlo en combinación con una costumbre JSF validador de lo que valida la entrada de antemano por la realización de una SELECT exactamente en esa columna y la comprobación de si el registro se devuelve. Una JSF validador permite visualizar el problema en el sabor de una rostros amables mensaje. Ver también, entre otros Validar el formato de correo electrónico y la singularidad en contra de la DB.

    Bravo @BalusC argumentos muy válidos
    estoy usando <f:ajax /> en todas las formas de mis aplicaciones, este FlashScope lo dice a redirect/reload página. ¿Cómo puedo enfrentar esto?
    Hay un ejemplo en «Véase también».
    La validación de la singularidad en el lado del servidor puede ser complejo. Por ejemplo, estoy enviando un sms a mi amigo. En este caso, no hay ninguna lógica o restricción para comprobar la singularidad. Tal vez, almacenamiento en caché, y la coincidencia de la solicitud podría dar una pista, pero incluso si ignoramos la coincidencia de costo, no podría ser de situaciones de negocio en el que las solicitudes con los mismos valores es parte de la norma.

    OriginalEl autor BalusC

  2. 3

    Lugar de crear un token de forma manual, puede utilizar BalusC » solución. Propuso un Post-Redirect-OBTENER el patrón en su blog

    Soluciones alternativas se pueden encontrar en estas respuestas:

    cuando pongo <f:ajax /> en h:commandButton ahora no es la re-presentación del formulario. Hace cumplir el requisito?
    Esto ya fue rechazado por la alta dirección de la misma
    El problema es que tenemos doble presentación activar y desactivar según nuestro escenario.

    OriginalEl autor Manuel

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein