23

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>

而 backing 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 或其他人一样的适当的评论接受者组件?

4

2 回答 2

36

这就是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!");
}
于 2013-02-19T14:57:44.940 回答
1

对于较新的 PrimeFaces 版本(至少 5+),您可以使用 p:defaultCommand 而不是脚本。虽然你不能使用 p:remoteCommand ,因为 p:defaultCommand 需要一些可点击的东西。

<p:inputText id="input" />
<p:defaultCommand target="submit" />
<!--you can show the button to allow the user to click too, or hide it with display: none-->
<p:commandButton id="submit" style="display: none;" process="input" />

默认情况下 p:defaultCommand 适用于整个表单。您可以使用scope属性对其进行限制。

于 2021-10-14T12:39:49.077 回答