update recargar pagina false event componentes actualizar javascript jsf primefaces el

javascript - recargar - primefaces commandbutton update



Expresión EL dentro de p: commandButton onclick no se actualiza/vuelve a renderizar en una solicitud ajax? (1)

En efecto. PrimeFaces (y JSF estándar) no vuelve a evaluar los atributos EL in on* por solicitud. Solo ocurre en base a la vista. Sin embargo, RichFaces lo hace en los <a4j:xxx> .

Tienes que resolver el problema de manera diferente. Sugiero usar el atributo visible de <p:dialog> lugar.

<h:form> ... <p:commandButton value="Delete all friends?" update=":deleteDialogs" /> </h:form> ... <h:panelGroup id="deleteDialogs"> <p:dialog id="deleteFriendsConfirmDialog" visible="#{facesContext.postback and not empty userBean.user.friendList}"> ... </p:dialog> <p:dialog id="friendsAlreadyDeletedErrorDialog" visible="#{facesContext.postback and empty userBean.user.friendList}"> ... </p:dialog> </h:panelGroup>

Una alternativa es utilizar PrimeFaces '' RequestContext en el método de acción del bean que le permite ejecutar código JavaScript programáticamente en el método de acción de bean (aunque esto ajusta el controlador un poco demasiado con la vista, IMO).

<p:commandButton value="Delete all friends?" action="#{userBean.deleteAllFriends}" />

con

RequestContext context = RequestContext.getCurrentInstance(); if (!user.getFriendList().isEmpty()) { context.execute("deleteFriendsConfirmDialog.show()"); } else { context.execute("friendsAlreadyDeletedErrorDialog.show()"); }

Sin relación con el problema concreto, su onclick original, aunque no funciona en su caso particular, muestra algunas prácticas deficientes. El javascript: pseudoprotocol es superfluo. Ya es el predeterminado. Eliminarlo Además, la prueba contra == ''true'' es superflua. Eliminarlo Simplemente deje que EL imprima true o false directamente. La siguiente es la sintaxis correcta (nuevamente, esto no resuelve su problema, solo para su información)

<p:commandButton onclick="if (#{not empty userBean.user.friendList}) deleteFriendsConfirmDialog.show(); else friendsAlreadyDeletedErrorDialog.show();" value="Delete all friends?" />

Hubiera funcionado si estuvieras usando RichFaces '' <a4j:commandButton> .

<a4j:commandButton oncomplete="if (#{not empty userBean.user.friendList}) deleteFriendsConfirmDialog.show(); else friendsAlreadyDeletedErrorDialog.show();" value="Delete all friends?" />

El atributo onclick de mi commandButton tiene algo de Javascript dependiente de EL dentro. Para ser más específico, aquí está esa pieza de código:

<p:commandButton onclick="javascript: if(''#{userBean.user.friendList.size() gt 0}'' == ''true'') deleteFriendsConfirmDialog.show(); else friendsAlreadyDeletedErrorDialog.show();" value="Delete all friends?" />

deleteFriendsConfirmDialog borra la lista de amigos y actualiza @form . La lista de amigos, CommandButton y los cuadros de diálogo están todos en esa forma.

Así que hago clic en el botón, aparece el cuadro de diálogo de confirmación (porque la longitud de la lista de amigos es gt 0), confirmo y la lista se vacía, la vista se actualiza. Sin embargo, cuando hago clic en ¿ Delete all friends? botón una vez más, el diálogo de confirmación vuelve a aparecer. Como la longitud de la lista ahora es 0, espero que aparezca el cuadro de diálogo de error.

Eso, supongo, es porque el Javascript escrito dentro de onclick no se actualiza (aunque el botón está en el formulario).

Editar: Cambiar #{userBean.user.friendList.size() gt 0} a #{not empty userBean.user.friendList} tampoco funciona.

¿Cómo? ¿Qué pasa aquí?

Cualquier ayuda apreciada. :)