2008-09-16 9 views
11

Si tiene un JSF <h:commandLink> (que usa el evento onclick de <a> para enviar el formulario actual), ¿cómo ejecuta JavaScript (como solicitar la confirmación de eliminación) antes de realizar la acción?¿Cómo puedo ejecutar Javascript antes de realizar una acción JSF <h: commandLink>?

+1

relacionadas: http://stackoverflow.com/questions/4571488/confirmation-on-submit – BalusC

+0

@ BalázsMáriaNémeth ¿Por favor me explique la forma en que no lo son? – EJP

Respuesta

7
<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 validación de formulario de entrada, etc.) podrían llevarse a cabo mediante la sustitución de la llamada a confirm() con una llamada a otra función.

1

Todavía puede usar onclick. El JSF render kit specification (consulte Comportamiento de codificación) describe cómo debe manejarlo el enlace. Aquí está la parte importante (lo que hace que para onclick):

var a=function(){/*your onclick*/}; var b=function(){/*JSF onclick*/}; return (a()==false) ? false : b(); 

Por lo que su función no será aprobada el objeto de evento (que no es el navegador cruz fiable de todos modos), pero volviendo verdadero/falso voluntad cortocircuito en el sumisión.

+0

No puedo agregar un atributo onclick a . Recibo el siguiente error: org.apache.jasper.compiler.CompileException: /MyPage.jsp(164,4) El atributo onclick no es válido según el TLD especificado También he visto a otras personas en foros solicitando una solución Me gusta esto. –

0

En JSF 1.2 puede especificar eventos onclick.

Además, otras bibliotecas como MyFaces o IceFaces implementan el controlador "onclick".

Lo que se necesita hacer a continuación es simplemente:

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

Nota: no se puede simplemente hacer return confirm(...) ya que esto bloqueará el resto del JavaScript en el evento de clic suceda, lo que haría de manera efectiva evite que su acción suceda sin importar lo que devuelva el usuario!

0

Si desea ejecutar algo antes de que se publique el formulario, para confirmación, por ejemplo, intente con el evento de formulario en Enviar. Algo así como:

myform.onsubmit = function(){confirm("really really sure?")}; 
0

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

No puedo agregar un atributo onclick a . Recibo el siguiente error: org.apache.jasper.compiler.CompileException:/MyPage.jsp (164,4) El atributo onclick no es válido según el TLD especificado. También he visto otras personas en los foros que solicitan una solución como esta. –

+0

@ grant-wagner, me doy cuenta que son muchos años pero tal vez la implementación que usaste en ese momento se rompió – akostadinov

14

se puede simplificar como esto

onclick="return confirm('Are you sure?');" 
+0

gracioso que las construcciones 'if' sean sugeridas en todas las publicaciones a continuación por desarrolladores con alguna experiencia ... y aún más divertido I Estoy aprendiendo de ellos :) – akostadinov

0
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; 
    } 
} 

usa este código para jsf 1.1.

7

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}"/> 
+10

Eso se puede simplificar como 'onclick =" return confirm ('¿Estás seguro?') "'. No es necesario verificar un valor booleano para devolver un valor booleano. Solo devuélvalo directamente. – BalusC

+0

¿Hay alguna manera fácil en Primefaces de implementar lo anterior utilizando '' en su lugar? – Robert

Cuestiones relacionadas