Cómo usar EL en el atributo oncomplete de PrimeFaces que se actualiza durante el método action

Este es el código:

 <p:ajax event="eventResized" process="@this calendar"  listener="#{bean.eventResized}" oncomplete="resizeComplete()"/>

eventReized invocado por el cual extendido desde y contiene alguna propiedad. ¿Puedo comprobar dentro llamar a su valor y pasar el resultado a EventResizeBehaviorAjaxBehaviorEvent<p:ajax....>oncomplete="resizeComplete(result)"

Algo así

<p:ajax event="eventResized" process="@this calendar"  listener="#{bean.eventResized}" oncomplete="resizeComplete(#{eventResized.id == 0})"/>
Respuestas:1 Respuesta 1
Tiempo:hace 7 años, 3 meses
Última modificación:hace 5 años, 7 meses

Solución

PrimeFaces no lo admite. Cualquier expresión EL en el atributo se evalúa inmediatamente durante la respuesta de representación de ese documento HTML, no durante la finalización de la llamada ajax asociada. Básicamente, el código JavaScript generado por el atributo contiene el valor antiguo tal como estaba durante la carga de la página.oncompleteoncomplete

Su mejor opción es usar RequestContext#addCallbackParam() para agregar una propiedad al objeto específico de PrimeFaces que esté disponible en el ámbito.argsoncomplete

RequestContext.getCurrentInstance().addCallbackParam("result", eventResized.getId() == 0);
<p:ajax ... oncomplete="resizeComplete(args.result)" />

Una alternativa es usar RequestContext#execute() en lugar de instruir mediante programación a PrimeFaces para que ejecute una pieza de JavaScript al completar la solicitud ajax.oncomplete

RequestContext.getCurrentInstance().execute("resizeComplete(" + (eventResized.getId() == 0) + ")");

Otras respuestas

Deja un comentario