JSF 2.0, Mojarra 2.0.1, PrimeFaces 3.4.1
Voici une p:inputText
composant qui devrait appeler une méthode de bean de sauvegarde lorsque la touche Entrée est enfoncée.
<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>
Alors que le bean de sauvegarde a la méthode de:
public void test(AjaxBehaviorEvent event) {
System.out.println("Pressed enter!");
}
C'est la méthode d'appel lorsque la touche Entrée est enfoncée mais elle a plus que cela; cas de comportement inattendu:
--Click input text
----Type some letters
------Click somewhere else in the page
--------CONSOLE: Pressed enter!
Je pense ajax event=change
détecte une modification et appelle la méthode. Comment convertir ce p:inputText
composant dans un composant preneur de commentaires approprié comme Facebook ou d'autres?
C'est ainsi que fonctionne l'événement onchange
en HTML. Cela se produit lorsque le texte de l'élément d'entrée est modifié, mais est déclenché lorsque le composant perd le focus (dans votre cas, c'est le moment où vous cliquez ailleurs dans la page).
Vous pouvez définir p:remoteCommand
pour test
et écrivez simplement:
<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; }"/>
et en backing bean:
public void test() {
System.out.println("Pressed enter!");
}