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

时间:2013-02-19 14:36:12

标签: jsf-2 primefaces

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 个答案:

答案 0 :(得分:32)

这是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!");
}