Aufruf-listener bean beim drücken von enter in JSF 2 h:inputText

Bin ich derzeit Schreibe meine erste JSF-2 Seite-und ich möchte, um folgende Prinzipien umzusetzen:
Wenn der user etwas schreibt, was in einer h:inputText-element und drückt die enter-Taste ein weiteres h:inputText sollte aktualisiert werden mit ein paar Daten aus einer Datenbank.

Meine Testseite enthält den folgenden code:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"      
      xmlns:h="http://java.sun.com/jsf/html">

    <h:body>
        <h3>JSF 2.0 Example</h3>

        <h:form>

           <h:inputText id="inputField" value="#{helloBean.name}">
              <f:ajax render="output" execute="inputField" event="keypress" listener="#{bean.myChangeListener}" /> 
           </h:inputText>
           <h2><h:outputText id="output" value="#{helloBean.name}" /></h2>  

        </h:form>
    </h:body>
</html>

Die Bohne enthält alle nötigen Getter und setter und diese Funktion:

public void myChangeEvent( AjaxBehaviorEvent event) {

        System.out.println( "VALUE CHANGED" );

}

UPDATE 2013-12-16:

Nach Stunden der Fehlersuche habe ich das problem gefunden warum nichts eingereicht wurde beim verlassen des textfield-Objekts oder drücken Sie die EINGABETASTE in das textfield. Meine web-Anwendung erstellt wurde, mit Vorlagen und in die Vorlage für meine page header eine "a4j:status" - tag und dieser war im Konflikt mit JSF 2. Nach dem entfernen der "a4j:status" -Zeile der myChangeEvent Methode wird aufgerufen, wenn ich Sie irgendwo anders auf der web-Seite nach der Bearbeitung der textfield-Wert.

Aber es gibt noch das problem, dass die ganze Seite vorgelegt wird, die beim Klick auf enter nach der änderung des textfield-Wert. Das ist weil ich auf eine Schaltfläche am unteren Rand der Seite das speichert die Benutzereingabe und deshalb unterwirft sich die ganze Seite, das ist OK. Aber sollte diese Schaltfläche nicht aufgerufen werden, wenn Sie die EINGABETASTE drücken in das textfield. Was ich noch hinzufügen zu meinem bestehenden code?

UPDATE 2013-12-17:
Nach einigem ärger mit JS habe ich es endlich funktioniert mit der Hilfe von L-Ray (danke nochmal).
Hier zeige ich die endgültige und lauffähige version mit JQuery:

<h:inputText id="inputField" value="#{helloBean.name}" >
    <f:ajax render="output" execute="inputField" event="change"  listener="#{helloBean.myChangeEvent}" />
</h:inputText>
<h2><h:outputText id="output" value="#{helloBean.name}" /></h2>  

<script type="text/javascript">
    $(document).ready(function() {

        $( "#mainForm\\:inputField" ).bind('keypress', function(e) {

            var keyCcode = e.keyCode || e.which;

            //Enter was pressed
            if(keyCcode == 13) { 
                e.target.blur();
                e.stopPropagation();
                return false;
            } else {
                return true;
            }
        });
    });
</script>
  • Ist der Wegfall der listener Attribut auf <f:ajax> ein Tippfehler?
  • Oh, ich bin sorry das war ein copy n paste-Fehler, aber immer noch die listener (die myChangeListener-Methode in der bean) nicht genannt
  • Standard, sagt der change-listener muss die Signatur public void processAjaxBehavior(javax.faces.event.AjaxBehaviorEvent event) throws javax.faces.event.AbortProcessingException). Hat die Anpassung Ihrer Zuhörer, die das Problem beheben?
  • Ich habe versucht die AjaxBehaviorEvent und auch versuchte, die keine parameter, aber das Ergebnis ist das gleiche
InformationsquelleAutor Metalhead89 | 2013-12-13
Schreibe einen Kommentar