2013-02-19 10 views
18

JSF 2.0, Mojarra 2.0.1, 3.4.1 PrimeFacesAufruf Jsf bean Methode aus Texteingabe, wenn

Hier wird eine Komponente, die eine p:inputText Träger bean Methode aufzurufen erwartet wird, wenn die Enter-Taste ENTER gedrückt.

<p:inputText id="commentInput" rendered="#{status.haveComment}" 
    value="#{statusBean.newComment}" 
    onkeypress="if (event.keyCode == 13) { onchange(); return false; }"> 
    <f:ajax event="change" listener="#{statusBean.test}" /> 
</p:inputText> 

Während Bohne Sicherung hat die Methode von:

public void test(AjaxBehaviorEvent event) { 
    System.out.println("Pressed enter!"); 
} 

Es Methode aufrufen, wenn Enter-Taste gedrückt wird, aber es hat mehr als das; unerwartetes Verhalten Fall:

--Click input text 
----Type some letters 
------Click somewhere else in the page 
--------CONSOLE: Pressed enter! 

Ich denke ajax event=change eine Änderung erkennt irgendwie und ruft die Methode. Wie konvertiert man diese p:inputText Komponente in eine richtige Kommentarfunktion wie Facebook oder andere?

Antwort

30

Dies ist die Art und Weise, wie onchange Ereignis in HTML funktioniert. Es passiert, wenn Text im Eingabeelement geändert wird, aber ausgelöst wird, wenn die Komponente den Fokus verliert (in diesem Fall ist es der Zeitpunkt, an dem Sie irgendwo anders auf die Seite klicken).

Sie können p:remoteCommand für test Methode definieren und nur schreiben:

<p:remoteCommand name="test" actionListener="#{statusBean.test}"/> 
<p:inputText id="commentInput" rendered="#{status.haveComment}" 
    value="#{statusBean.newComment}" 
    onkeypress="if (event.keyCode == 13) { test(); return false; }"/> 

und Bohne in die Sicherung:

public void test() { 
System.out.println("Pressed enter!"); 
} 
+0

Es ist wie ein Zauber funktioniert! Vielen Dank! –

+0

Ich habe ein Problem mit diesem mein Freund, [hier] (http://stackoverflow.com/q/14990692/1659451) –

+0

Vielen Dank. Das ist sehr hilfreich. –