2017-11-14 10 views
0

私のアプリケーションに問題があります。変更イベントのリスナーがの<p:inputText>です。私のページには<p:commandButton>もあります。 ajaxリスナと<p:commandButton>は両方とも、呼び出すときだけ期待どおりに動作します。この問題は、ユーザーが<p:inputText>を編集したときに発生し、まだフィールドに注目している間に、変更イベントajaxリスナー(予期される)をトリガーする<p:commandButton>を押しても、<p:commandButton>は呼び出されません(予期しない)。私はthis質問を読みましたが、答えは私のために問題を解決していないようでしたPrimeFaces p:ajaxイベント=変更およびp:commandButtonアクション

<p:inputText id="code" 
      value="#{myBean.code}" > 
    <p:ajax event="change" 
      listener="#{myBean.method1(myBean.code)}" 
      update="@(form :input:not(button))" /> 
</p:inputText> 

<p:commandButton id="searchButton" 
       value="Click me" 
       action="#{myBean.method2(myBean.code)}" 
       process="@this code" 
       update="@form" 
       oncomplete="PF('myDlg').show()" /> 

は、ここに私のコードです。

私はAjaxリスナーのボタンを処理しようとしましたが、ボタンを別のフォームに入れて、そのフォームをajaxリスナーから更新しようとしませんでしたが、わかりません。私も何をしようとしていますか?

ご協力いただきありがとうございます。

+0

'change'ではなく' blur'を使って試してみましたか? – Kukeltje

+0

@Kukeltjeはい、同じ問題が発生します –

答えて

1

プロジェクトはJSF 2.2ランタイムで実行されている場合は、パススルーを利用することができますが、私は同じ問題(第一押しのボタンのdoesntの仕事を、それが動作する次のプレスに)持っていたし、次のようにそれを解決しhttp://xmlns.jcp.org/jsf/passthrough

名前空間の属性方法:

  1. 追加の名前空間ページに

    xmlns:pt="http://xmlns.jcp.org/jsf/passthrough" 
    
  2. oninput attributを追加します。 p:inputTextに電子(p:ajaxは必要ありません)

    <p:inputText id="code" value="#{myBean.code}" pt:oninput="onTextChanged()"/> 
    
  3. 追加p:remoteCommand

    <p:remoteCommand delay="300" name="onTextChanged" 
           actionListener="#{myBean.method1(myBean.code)}" 
           update="@(form :input:not(button))" /> 
    

怒鳴る(遅延は必要ありませんが、それはテキストが高速に入力された場合にパフォーマンスが向上します。)

oninput属性は、入力フィールドがあらゆる種類の変更イベントを検出するのに役立ちます:入力、削除、コピー、PA刺しゅう、切断などを行い、p:remoteCommand経由で管理対象Beanに渡します。

また、「ボタン」の問題も解決します。

+0

それは動作します!素晴らしい考え。ありがとう –

関連する問題