Подтвердить что ты не робот

Jsf вызывает метод bean из текста ввода при нажатии enter

JSF 2.0, Mojarra 2.0.1, PrimeFaces 3.4.1

Вот компонент p:inputText, который, как ожидается, вызовет метод поддержки bean при нажатии клавиши ввода.

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

В то время как поддержка bean имеет метод:

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

Используется метод вызова при нажатии клавиши ввода, но он имеет больше, чем это; случай непредвиденного поведения:

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

Я думаю, что ajax event=change каким-то образом обнаруживает изменение и вызывает метод. Как преобразовать этот компонент p:inputText в соответствующий компонент комментатора, такой как Facebook или другие, есть?

4b9b3361

Ответ 1

Вот как работает onchange событие в HTML. Это происходит, когда текст во входном элементе изменяется, но запускается, когда компонент теряет фокус (в вашем случае это тот момент, когда вы нажимаете на другое место на странице).

Вы можете определить p:remoteCommand для метода test и просто написать:

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

и в поддержке bean:

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