2016-04-22 17 views
1

場合によっては、単純なクライアント側の検証を行う必要があり、それに応じて、ajax呼び出しを起動するかどうかを決定します。 しかし、IEでは、onchangeでfalseを返す場合や、p:ajaxでonstartを返しても、とにかくajaxイベントがまだ開始されているようです。JS検証によるajax呼び出しの防止

だから、私のコンポーネントは、現在、次のようになります。

<p:inputText id="pc" value="#{bean.pc}" valueChangeListener="#{bean.doStuff}" styleClass="if-nospace-upper" onchange="return isOK()"> 
     <p:ajax immediate="true" onstart="PF('busyPopup').show();" oncomplete="PF('busyPopup').hide();" /> 
    </p:inputText> 

無効、私のISOK()関数はfalseを返しますが、私はそれはしたくないのに対し、AJAX呼び出しがまだ行われています。

これを行う可能性はありますか?

+0

恐れ入ります。 p:ajax onstartでfalseを返すように見えますが、AJAXリクエストをキャンセルします!問題が解決しました。 –

答えて

1

1つの選択肢は、 <p:remoteCommand>

<p:inputText id="pc" value="#{bean.pc}" 
     valueChangeListener="#{bean.doStuff}" styleClass="if-nospace-upper" 
      onchange="return isOK()"> 
    </p:inputText> 
    <p:remoteCommand name="rc"> 
      <p:ajax onstart="PF('busyPopup').show();" oncomplete="PF('busyPopup').hide();" /> 
    </p:remoteCommand> 

とJavaScriptからです:

funtion isOK(){ 
//If Condtion matches 
rc(); 
} 

immediate="true"を取り出してください、それがここにあなたのすべての問題を与えていないが、あなたが<p:ajax>のために使用されて気づいたが、そうではありませんあなたが必要としない限り、jsfがいくつかのライフサイクルステップをスキップするようにするとよいでしょう。

関連する問題