2008-09-16 3 views
11

Wenn Sie eine JSF <h:commandLink> haben (die das -Ereignis verwendet, um das aktuelle Formular zu senden), wie führen Sie vor der Ausführung der Aktion JavaScript aus (z. B. um die Löschbestätigung anzufordern)?Wie kann ich Javascript ausführen, bevor eine JSF <h: commandLink> -Aktion ausgeführt wird?

+1

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

+0

@ BalázsMáriaNémeth Würden Sie mir bitte erklären, wie sie nicht? – EJP

Antwort

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> 

Weitere Aktionen Javascript (wie Validierung Formulareingabe usw.) könnte durch Ersetzen der Anruf confirm() mit einem Aufruf einer anderen Funktion durchgeführt werden.

1

Sie können immer noch onclick verwenden. Die JSF render kit specification (siehe Encode-Verhalten) beschreibt, wie der Link damit umgehen soll. Hier ist der wichtige Teil (was es macht für Onclick):

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

So pflegen Sie Ihre Funktion das Ereignis-Objekt übergeben werden (die nicht zuverlässig Cross-Browser ist sowieso), aber Rückkehr wahr/falsch Willen Kurzschluss der Einreichung.

+0

Ich kann dem kein onclick-Attribut hinzufügen. Ich erhalte den folgenden Fehler: org.apache.jasper.compile.CompileException: /MyPage.jsp(164,4) Attribut onclick ungültig gemäß der angegebenen TLD Ich habe auch eine Reihe anderer Leute in Foren gesehen, die eine Lösung anfordern so was. –

0

In JSF 1.2 können Sie onclick-Ereignisse angeben.

Auch andere Bibliotheken wie MyFaces oder IceFaces implementieren den "onclick" -Handler.

Was müssen Sie dann zu tun ist einfach:

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

Hinweis: Sie können nicht nur tun return confirm(...), da dies den Rest des JavaScript in dem OnClick-Ereignisse blockieren passiert, was würde effektiv Stoppen Sie Ihre Aktion, egal was der Benutzer zurückgegeben hat!

0

Wenn Sie etwas ausführen möchten, bevor das Formular gesendet wird, versuchen Sie zur Bestätigung das Formularereignis onSubmit. Etwas wie:

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

Diese nie für mich gearbeitet,

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

aber das hat

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

Ich kann dem kein onclick-Attribut hinzufügen. Ich erhalte den folgenden Fehler: org.apache.jasper.compiler.CompileException:/MyPage.jsp (164,4) Attribut onclick ungültig gemäß der angegebenen TLD Ich habe auch eine Reihe anderer Leute in Foren gesehen, die eine solche Lösung anfordern. –

+0

@ grant-wagner, ich weiß, es ist viele Jahre jetzt, aber vielleicht Implementierung, die Sie zu der Zeit verwendet wurde – akostadinov

14

Kann wie diese

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

lustig, dass 'if' Konstrukte sind in allen Posts unten von Entwicklern mit etwas Erfahrung vorgeschlagen .. und noch lustiger ich Ich lerne von ihnen :) – 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; 
    } 
} 

Verwenden Sie diesen Code für jsf 1.1.

7

Das ist für mich gearbeitet:

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

Das kann vereinfacht werden als 'onclick =" zurück bestätigen ('Bist du sicher?') "'. Es ist nicht notwendig, einen booleschen Wert zu überprüfen, um einen booleschen Wert zurückzugeben. Gib es einfach direkt zurück. – BalusC

+0

Gibt es einen einfachen Weg in Primefaces, um das obige zu implementieren, indem du stattdessen '' verwendest? – Robert