按Enter键时,Jsf从输入文本调用bean方法

Öme*_*alı 21 primefaces jsf-2

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>
Run Code Online (Sandbox Code Playgroud)

虽然支持bean有以下方法:

public void test(AjaxBehaviorEvent event) {
   System.out.println("Pressed enter!");
}
Run Code Online (Sandbox Code Playgroud)

当按下回车键时它是调用方法,但它有更多; 意外行为案例:

--Click input text
----Type some letters
------Click somewhere else in the page
--------CONSOLE: Pressed enter!
Run Code Online (Sandbox Code Playgroud)

我认为ajax event=change以某种方式检测到变化并调用该方法.如何将此p:inputText组件转换为适当的评论接受者组件,如Facebook或其他人?

par*_*lov 35

这是onchange事件在HTML中的工作方式.当input元素中的文本发生更改时会发生这种情况,但是当组件失去焦点时会触发(在您的情况下,当您单击页面中的其他位置时).

您可以定义p:remoteCommandtest方法,只是写:

<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; }"/>
Run Code Online (Sandbox Code Playgroud)

并在支持bean:

public void test() {
 System.out.println("Pressed enter!");
}
Run Code Online (Sandbox Code Playgroud)