it-swarm-es.com

¿Cómo puedo ejecutar JavaScript antes de que se realice una acción JSF <H: CommandLink>?

Si tienes un JSF <h:commandLink> (que usa el evento onclick de un <a> Para enviar el formulario actual), ¿cómo ejecuta Javascript (como pedir la confirmación de eliminación) antes de que se realice la acción?

11
Grant Wagner
<h:commandLink id="myCommandLink" action="#{myPageCode.doDelete}">
    <h:outputText value="#{msgs.deleteText}" />
</h:commandLink>
<script type="text/javascript">
if (document.getElementById) {
    var commandLink = document.getElementById('<c:out value="${myPageCode.myCommandLinkClientId}" />');
    if (commandLink && commandLink.onclick) {
        var commandLinkOnclick = commandLink.onclick;
        commandLink.onclick = function() {
            var result = confirm('Do you really want to <c:out value="${msgs.deleteText}" />?');
            if (result) {
                return commandLinkOnclick();
            }
            return false;
        }
    }
}
</script>

Otras acciones de JavaScript (como la entrada de validación de la entrada, etc.) se pueden realizar reemplazando la llamada a confirm() con una llamada a otra función.

7
Grant Wagner

Se puede simplificar así

onclick="return confirm('Are you sure?');"
14
iordan

Esto funcionó para mí:

<h:commandButton title="#{bundle.NewPatient}" action="#{identifController.prepareCreate}"  
                                             id="newibutton" 
                                             onclick="if(confirm('#{bundle.NewPatient}?'))return true; else return false;" 
                                             value="#{bundle.NewPatient}"/>
7
Hanynowsky

Si desea ejecutar algo antes de que se publique el formulario, para la confirmación, por ejemplo, pruebe el evento de formulario en el segundo. Algo como:

myform.onsubmit = function(){confirm("really really sure?")};
0
Victor
var deleteClick;
var mess="xxx";
function assignDeleteClick(link) {
    if (link.onclick == confirmDelete) {
        return;
    }
    deleteClick = link.onclick;
    link.onclick = confirmDelete;
}


function confirmDelete() {
    var ans = confirm(mess);
    if (ans == true) {
        return deleteClick();
    } else {
        return false;
    }
} 

utilice este código para JSF 1.1.

0
user562189

En JSF 1.2 puede especificar eventos ONCLICK.

Además, otras bibliotecas como MyFaces o Icefaces implementan el controlador "ONCLICK".

Lo que tendrías que hacer entonces es simplemente:

<h:commandLink action="#{bean.action}" onclick="if(confirm('Are you sure?')) return false;" />

NOTA: No puede simplemente hacer return confirm(...), ya que esto bloqueará el resto del JavaScript en el evento ONCLICK, lo que sucedió, lo que detenga de manera efectiva su acción sin importar lo que haya regresado el usuario.

0
user7094

Esto nunca funcionó para mí,

 onclick="if(confirm('Are you sure?')) return false;" />

pero esto hizo

onclick="if(confirm(\"Are you sure?\"))return true; else return false;"
0
Creigh