23

JSF 2.0、モハラ 2.0.1、PrimeFaces 3.4.1

以下はp:inputText、Enter キーが押されたときにバッキング 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!");
}

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

そしてバッキングビーンで:

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 に答える