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 или другие, есть?
Ответы
Ответ 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!");
}