2011-12-16 11 views
1

テキストボックスがあります。ユーザーがテキストボックスの外側をクリックすると、以下のコードはdoSomethingOnValueChangeを呼び出します。物事は期待どおりに機能します。一方、ユーザがテキストボックスを編集してsaveを直接クリックすると、saveメソッドが最初に呼び出され、doSomethingOnValueChangeが後で呼び出されます。これをどうすれば解決できますか?それを修正するだろうonkeyupイベント、JSF onchangeして保存します。

<a4j:support ajaxSingle="true" event="onkeyup" /> 
+0

即時削除するとどうなりますか? – wrschneider

+0

即時=真を取り除くことは役に立たない。 – user238021

+0

この構成では、すぐにボタンを押すと、値変更リスナーを2回呼び出す必要があります。ボットンによって起動された同期要求と、変更イベントによって起動されたajaxによって一回。それは本当に一度だけ呼び出されますか? – BalusC

答えて

0

試み、これを試してみてください。

<f:metadata> 
<f:viewParam name="p" value="#{myBean.myTextBox}" /> 
</f:metadata> 

<script type="text/javascript"> 
function getValue() 
    { 
    var x=document.getElementById("form:text").value; 
    return x; 
    } 
</script> 



<h:inputText required="true" id="text" 
      valueChangeListener="#{controller.doSomething}" > 
      <a4j:param noEscape="true" value="getValue()" name="p" /> 
      <a4j:ajax event="change" /> 
     </h:inputText> 

    <h:commandButton value="Save" action="#{controller.save}" /> 
+0

試してonKeyupしようとしました - – user238021

+0

@ user238021 - あなたが説明した 'valueChangeListener'は、' onblur'イベントだけを起動したように動作しています。ですから、入力テキストのjsfunction 'onchange'イベントを呼び出す' a4j:jsFunction'を使ってコンセプトを変更してください。 – niksvp

0

を使用して

<ui:define name="label">My Text box</ui:define> 
<h:inputText required="true" value="#{myBean.myTextBox}" 
    immediate="true" valueChangeListener="#{controller.doSomethingOnValueChange}"> 
     <a4j:support ajaxSingle="true" event="onchange" />   
</h:inputText> 

<h:commandButton value="Save" action="#{controller.save}" /> 
0

私は私の保存ボタンにrequestDelay = "30" を追加しました。ボタンをa4jボタンに変更しました。それが私の問題を解決しました。私はweb.xmlにグローバルキューを追加しました

<context-param> 
    <param-name>org.richfaces.queue.global.enabled</param-name> 
    <param-value>true</param-value> 
</context-param> 
+0

saveボタンに遅延を追加すると、onchangeイベントの実行に役立つことが理解できますか? – Logan

関連する問題