2013-02-19 9 views
18

JSF 2.0, Mojarra 2.0.1, 3.4.1 primefacesJsf chiamando il metodo di fagioli dal testo di input quando premendo Invio

Qui è un componente p:inputText che si prevede di chiamare un metodo di fagioli supporto quando il tasto INVIO è premuto.

<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> 

Mentre il backup fagiolo ha il metodo di:

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

è il metodo chiamando quando si preme il tasto entrare, ma ha più di questo; inaspettata caso il comportamento:

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

penso ajax event=change rileva un cambiamento in qualche modo e chiama il metodo. Come convertire questo componente p:inputText in un componente di commento appropriato come Facebook o altri?

risposta

30

Questo è il modo in cui l'evento onchange funziona in HTML. Sta accadendo quando il testo nell'elemento input viene modificato, ma viene attivato quando il componente perde lo stato attivo (nel tuo caso quello è il momento in cui clicchi da qualche altra parte nella pagina).

È possibile definire p:remoteCommand per test metodo e solo scrivere:

<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; }"/> 

e nel sostenere di fagioli:

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

Sta funzionando come un fascino! Grazie! –

+0

Ho un problema relativo a questo mio amico, [qui] (http://stackoverflow.com/q/14990692/1659451) –

+0

Grazie. Questo è molto utile. –

Problemi correlati