2017-11-29 9 views
0

Auf einem JSF SelectOneMenu habe ich ein ajax-Ereignis onchange, und wenn ein Benutzer mit einer Bestätigungsfrage eine Änderung abbricht, wie kann ich den Wert auf SelectOneMenu auf den ursprünglichen Wert zurücksetzen ?JSF SelectOneMenu onchange, onsubmit Abbrechen Reset-Wert

<h:selectOneMenu value="#{bean.selectedFruit}"> 
    <f:selectItems value="#{bean.fruits}"/> 
    <a:support event="onchange" onsubmit="if(!confirm('Are you sure?'))return false;}" action="#{bean.loadFruitStats}" rerender="body"/> 
</h:selectOneMenu> 

So auf dem obigen Beispiel, wenn der Benutzer klicken Sie auf ‚Nein‘ auf dem Bestätigungsdialog, die Aktion nicht genannt wird, und rerender werden nicht genannt, so die SelctOneMenu ist auf dem aktualisierten „Frucht“ Namen, nicht die Original (also der Name der Frucht und die Statistik der Fruchtstatistiken stimmt nicht überein). Was kann ich tun, um sie zu synchronisieren?

Antwort

0

kann mit Hilfe von Javascript auf den ursprünglichen Wert zurückgesetzt werden.

  1. Zuerst müssen Sie eine id-h:selectOneMenu definieren. Zum Beispiel

    <h:selectOneMenu id="selFruitId"...> 
    
  2. In folgenden (selbsterklärend) Java-Skript zu JSF Seite

    var currentValue; 
    function saveCurrentValue(){ 
        //get html select element 
        var element=document.getElementById("form:selFruitId"); 
        //saves currently selected value 
        currentValue=element.value; 
    } 
    
    function areYouSure(){ 
        if(!confirm('Are you sure?')){ 
         //if canceled, restores previously saved value 
         document.getElementById("form:selFruitId").value=currentValue; 
         return false; 
         } 
    } 
    
  3. Dann brauchen Sie Moment abzufangen, wenn der Benutzer zu Änderung versucht ausgewählter Wert mit Maus (onclick Ereignis) oder Tastatur (onkeypress Ereignis, zum Beispiel, links-rechts- Aufwärts-/Abwärts-Cursortasten oder eine andere Taste) und speichern aktuell ausgewählten Wert für später.

    <h:selectOneMenu id="selFruitId" 
           onclick="saveCurrentValue()" onkeypress="saveCurrentValue()"...> 
    
  4. Und schließlich vor Ajax-Ausführung, müssen Sie function areYouSure() nennen, das wird, wenn gelöscht, gespeichert (original) Wert h:selectOneMenu wiederherstellen zurück.

    <h:selectOneMenu value="#{bean.selectedFruit}" id="selFruitId" 
           onclick="saveCurrentValue()" onkeypress="saveCurrentValue()"> 
        <f:selectItems value="#{bean.fruits}"/> 
        <a:support event="onchange" onsubmit="areYouSure()" action="#{bean.loadFruitStats}" rerender="body"/> 
    </h:selectOneMenu> 
    
Verwandte Themen